国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

改進(jìn)的μC/OS-Ⅱ關(guān)鍵算法在ARM7上的應(yīng)用

發(fā)布時(shí)間:2010-4-1 11:33    發(fā)布者:我芯依舊
1 引言

當(dāng)前,嵌入式開發(fā)領(lǐng)域?qū)Ξa(chǎn)品的要求越來越多.如通信速率,穩(wěn)定性,產(chǎn)品功能,可擴(kuò)展性,可移植性,適應(yīng)性等。為了適應(yīng)這些要求,作者對(duì)低版本的μC/OS-II做了一些改進(jìn)。并選擇一款性價(jià)比高的微處理器LPC2210作為其運(yùn)行的硬件平臺(tái)。本文論述的高級(jí)繼電器保護(hù)裝置除可以動(dòng)態(tài)地實(shí)現(xiàn)模擬量和開關(guān)量的數(shù)據(jù)采集外,還可以作為web終端通過遠(yuǎn)程主機(jī)對(duì)終端進(jìn)行控制或訪問。

2 μC/OS-II其內(nèi)核結(jié)構(gòu)

宏觀的講,μC/OS-Ⅱ大致分成內(nèi)核結(jié)構(gòu)、任務(wù)管理、時(shí)間管理、任務(wù)之間的通信與同步和CPU的移植等5個(gè)部分。由于嵌入式多任務(wù)應(yīng)用功能軟件系統(tǒng)是應(yīng)用設(shè)計(jì)的范疇,所以并不包含在內(nèi)核中。內(nèi)核保留給上層應(yīng)用的接口有3個(gè),分別是軟保護(hù)、任務(wù)間的通信ITC、和設(shè)備服務(wù)DSR。一個(gè)μC/OS-II內(nèi)核現(xiàn)狀的結(jié)構(gòu)圖如圖1所示。


圖1 μC/OS-Ⅱ內(nèi)核現(xiàn)狀結(jié)構(gòu)簡(jiǎn)圖

3 μC/OS-Ⅱ關(guān)鍵算法邏輯

μC/OS-II采用的是可剝奪型內(nèi)核,它總是執(zhí)行就緒條件下優(yōu)先級(jí)最高的任務(wù)。系統(tǒng)通過兩種方法進(jìn)行任務(wù)調(diào)度:一是時(shí)鐘節(jié)拍或其它硬件中斷到來后,系統(tǒng)會(huì)調(diào)用函數(shù)執(zhí)行切換任務(wù)功能;二是任務(wù)主動(dòng)進(jìn)入掛起態(tài)或等待態(tài),這時(shí)系統(tǒng)通過發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來完成任務(wù)切換,中斷服務(wù)程序或陷阱處理程序的向量地址必須指向函數(shù)OSCtxSw()。任務(wù)的優(yōu)先級(jí)唯一地標(biāo)識(shí)了任務(wù),即使兩個(gè)任務(wù)的重要性是相同的,任務(wù)間也必須有優(yōu)先級(jí)上的差異,這就意味著高優(yōu)先級(jí)的任務(wù)被處理完成之后,必須進(jìn)入等待態(tài)或者掛起態(tài),否則低優(yōu)先級(jí)的任務(wù)永遠(yuǎn)也不可能執(zhí)行,從而嚴(yán)重暴露出μC/OS-Ⅱ的缺點(diǎn),甚至造成系統(tǒng)癱瘓。在產(chǎn)品的開發(fā)中也不難發(fā)現(xiàn)其內(nèi)核算法存在的一些問題,如內(nèi)核具體代碼方面的、體系結(jié)構(gòu)方面的、以及移植作者方面的問題,其中最顯著的就是硬實(shí)時(shí)性和設(shè)備驅(qū)動(dòng)框架問題。

3.1硬保護(hù)算法的改進(jìn)

在μC/OS-II操作系統(tǒng)中,臨界區(qū)、硬保護(hù)和軟保護(hù)是幾個(gè)緊密聯(lián)系的概念,而硬保護(hù)算法又與開關(guān)中斷、堆棧和局部變量相聯(lián)系。從保護(hù)的角度考慮,系統(tǒng)的代碼可以劃分為三種運(yùn)行環(huán)境,即任務(wù)環(huán)境、中斷環(huán)境和設(shè)備環(huán)境。當(dāng)代碼運(yùn)行于這三種環(huán)境中時(shí),需要的保護(hù)有很大的區(qū)別。下面將對(duì)臨界區(qū)及其保護(hù)措施中的部分概念作出定義。

定義1:和中斷環(huán)境相關(guān)的系統(tǒng)保護(hù)稱為硬保護(hù)(HP,Hard Protect)。

定義2:和設(shè)備環(huán)境相關(guān)的系統(tǒng)保護(hù)稱為設(shè)備保護(hù)(DP , Device Protect)。

定義3:純粹任務(wù)之間的保護(hù)稱為軟保護(hù)(SP,Soft Protect)。

區(qū)別使用不同的保護(hù)機(jī)制對(duì)提高系統(tǒng)的中斷能力和穩(wěn)定性是非常重要的。當(dāng)系統(tǒng)中大部分功能是與硬件設(shè)備進(jìn)行數(shù)據(jù)交流時(shí)應(yīng)盡量用軟保護(hù)SP和設(shè)備保護(hù)DP代替硬保護(hù)HP,也是提高系統(tǒng)實(shí)時(shí)反應(yīng)能力的重要手段。硬保護(hù)的方法有三種,在三種硬保護(hù)算法的實(shí)現(xiàn)方法中。第一種方法只是單純的開關(guān)中斷,因此最簡(jiǎn)單;但在嵌套調(diào)用時(shí)通常會(huì)出現(xiàn)內(nèi)層的開中斷代碼干擾外層保護(hù)的邏輯。第二種方法借助堆棧功能很好地解決了第一種方法的嵌套問題,但堆棧指針無法確定。第三種方法是在每個(gè)硬保護(hù)代碼的函數(shù)中定義一個(gè)局部變量,進(jìn)入保護(hù)前保存狀態(tài),退出保護(hù)時(shí)恢復(fù)狀態(tài)。當(dāng)OS_CRITICAL_METHOD==3時(shí),實(shí)現(xiàn)代碼如下:

Void functionx()
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
⋯⋯
OS_ENTER_CRITICAL();
⋯⋯   //需要硬保護(hù)的臨界區(qū)代碼
OS_EXIT_CRITICAL();
}

3.2調(diào)度器算法的改進(jìn)

眾所周知,μC/OS-II在設(shè)計(jì)時(shí)強(qiáng)調(diào)實(shí)時(shí)性。它采用單一的基于優(yōu)先級(jí)的搶先式調(diào)度算法,有效地保證了實(shí)時(shí)性的要求。其另外一個(gè)特點(diǎn)是任務(wù)切換帶來的時(shí)延窗口很小。在任務(wù)的邏輯狀態(tài)中,只有就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)才可以被真正運(yùn)行。μC/OS-II任務(wù)級(jí)的調(diào)度器是通過函數(shù)OSSched()實(shí)現(xiàn)的,0ssched()基本上分布在μC/OS-II的各種ITC功能塊中。調(diào)度器函數(shù)的偽代碼如下:

{
(1)如果鎖定任務(wù)切換(配合軟保護(hù)),則直接退出。
(2)計(jì)算當(dāng)前優(yōu)先級(jí)任務(wù)。
(3)如果當(dāng)前任務(wù)就是最高優(yōu)先級(jí)任務(wù),則直接退出。
(4)將最高優(yōu)先級(jí)任務(wù)編號(hào)(OSPrioHighRdy)賦給當(dāng)前任務(wù)編號(hào)(OSPrioCur)。
(5)讀出最高優(yōu)先級(jí)任務(wù)的控制塊數(shù)據(jù)指針到OSTCBHighRdy指針。
(6)保存當(dāng)前任務(wù)的環(huán)境。保存當(dāng)前任務(wù)的sP到OS_TCB結(jié)構(gòu)中的堆棧指針。
(7)讀出最高優(yōu)先級(jí)任務(wù)OSTCBHighRdy及其中的SP,設(shè)置堆棧,恢復(fù)所改任務(wù)的環(huán)境,并讀出堆棧中保存的PC(程序計(jì)數(shù)器,任務(wù)當(dāng)前代碼位置)設(shè)置好處理器的PC器存器,任務(wù)即可開始執(zhí)行。
}

在任務(wù)數(shù)據(jù)結(jié)構(gòu)0S_TCB描述中只能見到等待、休眠和就緒三個(gè)標(biāo)記值。每個(gè)任務(wù)具有一個(gè)任務(wù)控制塊OS_TCB,任務(wù)控制塊負(fù)責(zé)記錄任務(wù)執(zhí)行的環(huán)境,包括任務(wù)的優(yōu)先級(jí)、堆棧指針和相關(guān)事件控制塊指針等。內(nèi)核將系統(tǒng)中處于就緒態(tài)的任務(wù)在就緒表中進(jìn)行標(biāo)注,通過就緒表中的兩個(gè)變量OSRdyGrp和OSRdyTbl[]可快速查找系統(tǒng)中就緒的任務(wù)。讓任務(wù)進(jìn)入等待、就緒等狀態(tài)等標(biāo)記任務(wù)狀態(tài)描述值的功能是分散在其它模塊中完成的,在此需要修OS_TCB中的OSTCBStat字段。如用ITC中的信號(hào)量把任務(wù)設(shè)置到等待態(tài)或者把相關(guān)任務(wù)設(shè)置為就緒態(tài)等。

為了提高μC/OS-II適應(yīng)性,在保證其實(shí)時(shí)性的前提下,對(duì)μC/OS-II的任務(wù)狀態(tài)圖的等待或掛起態(tài)分離為阻塞和等待態(tài),以便實(shí)現(xiàn)優(yōu)先級(jí)與時(shí)間片結(jié)合式調(diào)度。從而可以從體系結(jié)構(gòu)上避免μC/OS-II存在的不足。如缺乏時(shí)間片調(diào)度、低優(yōu)先級(jí)的任務(wù)很難得到執(zhí)行、不支持同優(yōu)先級(jí)任務(wù)的調(diào)度、優(yōu)先級(jí)反轉(zhuǎn)等問題。改進(jìn)的任務(wù)狀態(tài)轉(zhuǎn)換圖2。


圖2改進(jìn)的任務(wù)狀態(tài)轉(zhuǎn)換圖

3.3任務(wù)就緒算法的改進(jìn)

改進(jìn)的μC/OS-II可以管理多達(dá)255個(gè)任務(wù)甚至更多,并且提供功能齊全的實(shí)時(shí)操作服務(wù)。實(shí)際上,就緒任務(wù)表是一個(gè)位矩陣。OSRdyTb1矩陣中位的值為0或1,表示對(duì)應(yīng)的prio任務(wù)是否就緒。prio的數(shù)據(jù)位分為兩部分,Y表示縱坐標(biāo),x表示橫坐標(biāo),和矩陣中的一位對(duì)應(yīng)。OSRdyGrp是縱坐標(biāo)上就緒任務(wù)組的紀(jì)錄,只要該組中任何一位代表的任務(wù)就緒(非零),Os_RdyGrp縱坐標(biāo)的對(duì)應(yīng)位就標(biāo)記為就緒。任務(wù)就緒算法和查詢就緒算法如下:

(1)任務(wù)就緒算法:根據(jù)任務(wù)優(yōu)先級(jí)數(shù)使任務(wù)進(jìn)入就緒狀態(tài)

OSRdyGrp 1=OSMapTbl[prio>>3];   //用Y映射出縱坐標(biāo)位
OSRdyTb1[prio>>3] 1=OSMapTb1[prio&0x07];  //用X映射出橫坐標(biāo)位

(2)查詢就緒算法:通過此算法。μC/OS-II可以找出進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。

y = OSUnMapTbl[OSRdyGrp]; //直接對(duì)應(yīng)出縱坐標(biāo)
x = OSUnMapTbl[OSRdyTbl[y]]; //直接對(duì)應(yīng)出橫坐標(biāo)
prio=(y<<3)+x;  //算出優(yōu)先級(jí)

由于老版本的μC/OS-II最多只能管理64個(gè)任務(wù).分別對(duì)應(yīng)優(yōu)先級(jí)0~63,其中0為最高優(yōu)先級(jí),63為最低級(jí),系統(tǒng)保留了4個(gè)最高優(yōu)先級(jí)的任務(wù)和4個(gè)最低優(yōu)先級(jí)的任務(wù).實(shí)際上用戶可以使用的任務(wù)數(shù)僅有56個(gè)。就緒任務(wù)表其實(shí)是一個(gè)8x8的位矩陣,而且這個(gè)矩陣可以簡(jiǎn)化為橫縱兩個(gè)數(shù)組,同時(shí)保持了常數(shù)運(yùn)算。對(duì)于要求用μC/OS-II管理更多任務(wù)的情況,如要管理255個(gè)任務(wù),該算法仍然具有意義。改進(jìn)前和改進(jìn)后的任務(wù)就緒表如圖3。


圖3改進(jìn)前和改進(jìn)后的任務(wù)就緒表

此時(shí)。最低優(yōu)先級(jí)OS_LOWEST_PRIO的定義值可以大于63,但不能大于254。當(dāng)μC/OS-II初始化的時(shí)候。最低優(yōu)先級(jí)OS_LOWEST_PRIO總是被賦給空閑任務(wù)idle task。就緒表(readv list)和事件等待表(event wait lists)由一個(gè)16x16的矩陣代替。從理論上講.這也是最低優(yōu)先級(jí)OS_LOWEST_PRIO的定義值不能大于254的原因。


3.4軟保護(hù)算法

純粹任務(wù)之間的保護(hù)稱為軟保護(hù)(SP,Soft Protect)。在μC/OS-II中,軟保護(hù)包括OSSchedLock和OSSchedUnLock兩個(gè)函數(shù),用于保護(hù)純?nèi)蝿?wù)間全局變量的訪問。基本思路是借助硬保護(hù)遞增(解鎖時(shí)遞減)標(biāo)記變量OSLockNesting,并在任務(wù)調(diào)度器中判斷此標(biāo)記變量,以此鎖住任務(wù)調(diào)度器。

4 改進(jìn)的μC/OS-II在LPC2210上的移植

移植μC/OS-II到LPC2210上,需編寫與處理器相關(guān)的幾個(gè)文件:OS_CPU.H、OS_CPU_A.S、OS_CPU_C.C。除了編寫這三個(gè)文件之外,還必須編寫目標(biāo)板的初始化啟動(dòng)代碼,這是運(yùn)行任何其它軟件的基礎(chǔ)。μC/OS-II要求所有*.c文件都要包含頭文件includes.h,這樣使得用戶項(xiàng)目中的每個(gè)*.c文件不用考慮它實(shí)際上需要那些頭文件。使用includes.h的缺點(diǎn)是可能會(huì)包含一些不相關(guān)的頭文件,也可能會(huì)增加每個(gè)文件的編澤時(shí)間,但卻增強(qiáng)了代碼的可移植性。本移植不使用軟中斷SWI做底層接口,在OS_CPU.H中定義#define OS_CRITICAL_METHOD 3,即采用第三種方式實(shí)現(xiàn)開/關(guān)中斷。具體用法已在前面作了介紹。

5 結(jié)束語

本文針對(duì)μC/OS-II的關(guān)鍵算法在分析的基礎(chǔ)上進(jìn)行了改進(jìn),并將其應(yīng)用到了基于ARM7的RISC微處理器LPC2210上。通過實(shí)際的調(diào)試和在高級(jí)繼電器保護(hù)裝置中的應(yīng)用,表明改進(jìn)方案是可行的。在不損害實(shí)時(shí)性的前提下,增強(qiáng)了μC/OS-Ⅱ?qū)π枨蟮倪m應(yīng)性、執(zhí)行效率和對(duì)任務(wù)的管理能力。

本文創(chuàng)新點(diǎn):(1)通過對(duì)μC/OS-Ⅱ的體系結(jié)構(gòu)和關(guān)鍵算法的分析,指出了其在應(yīng)用中存在的不足和改進(jìn)的方法。(2)增強(qiáng)了μC/OS-II對(duì)需求的適應(yīng)性、執(zhí)行效率和對(duì)任務(wù)的管理能力。(3)對(duì)EasyARM2200開發(fā)板提供的例程做了改進(jìn)并將其移植到了自己的開發(fā)板上,為應(yīng)用功能的擴(kuò)展打下了基礎(chǔ)。


作者:孟開元,侯貴雙,曹慶年      來源:《微計(jì)算機(jī)信息》(嵌入式與SOC)2009年第7-2期
本文地址:http://m.qingdxww.cn/thread-10071-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久h | 亚洲不卡视频在线观看 | 好吊日视频在线 | 国产一区二区三区手机在线观看 | 国产精品国产精品国产专区不卡 | 日日夜夜中文字幕 | 国产第一页在线观看 | 国产中文字幕亚洲 | 四虎播放 | 成年人视频免费在线观看 | 欧美日韩一区二区综合在线视频 | 亚洲国产成人精品激情 | 最近中文字幕2019 | 亚洲男人第一av网站 | 欧美日韩免费一区二区在线观看 | 日韩精品欧美高清区 | 日韩在线二区 | 成人免费在线播放视频 | 日日操网站 | 欧美日韩国产色 | 亚洲已满18点击进入在线观看 | 亚洲国产成人久久精品图片 | 韩国欧洲一级毛片免费 | 天堂网在线观看在线观看精品 | aaa特级毛片 | 美女国内精品自产拍在线播放 | 日韩专区在线观看 | 精品91自产拍在线 | 日韩 欧美 中文字幕 不卡 | 免费在线黄 | 九九99热 | 一个人www免费观看 一个人hd免费完整高清视频 | 91九色在线播放 | 久久66热这里只会有精品 | 久久精品6 | 日韩免费成人 | 亚洲精品动漫在线 | 不卡一区二区在线 | 亚洲视频在线一区二区 | 欧美日韩免费播放一区二区 | 青青青青青国产免费手机看视频 |