當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]μC/OS-II 是一個源代碼公開、可移植、可裁剪的實時多任務操作系統(tǒng),具有穩(wěn)定可靠、實時性好等優(yōu)點,是專門針對微處理器和微控制器設計的實時內核,它的內核可以做到很小

μC/OS-II 是一個源代碼公開、可移植、可裁剪的實時多任務操作系統(tǒng),具有穩(wěn)定可靠、實時性好等優(yōu)點,是專門針對微處理器和微控制器設計的實時內核,它的內核可以做到很小,很適合在單片機系統(tǒng)上移植。移植了μC/OS-II 的嵌入式系統(tǒng)可以使各個任務獨立工作,互不干涉,很容易實現準時而且無誤執(zhí)行,使實時應用程序的設計和擴展變得容易,使應用程序的設計過程大為減化。在這個星期內,我通過對禁用了郵箱、隊列、文件系統(tǒng)的最簡單的μCOS-ii操作系統(tǒng)進行了學習,現將收獲分享如下。

μCOS-ii運行過程

μCOS-ii的主函數不到十行代碼,但是因為其高度的結構化以及良好的函數封裝,對其運行過程的了解對于學習μCOS-ii的編程思想以及設計思路具有重大的意義。

我通過將μCOS-ii代碼移植到SST89V564RD單片機中,并且利用TI公司的溫度傳感器TMP124創(chuàng)建了兩個任務:讀TMP122數據、向串口發(fā)送讀取的溫度值。要求兩個任務輪流執(zhí)行,讀TMP122的優(yōu)先級高于向串口發(fā)送數據的優(yōu)先級。

1 系統(tǒng)初始化

在μCOS-ii中,系統(tǒng)初始化可以分為全局變量初始化、創(chuàng)建空閑任務任務、堆棧初始化、任務控制塊初始化等部分內容。

全局變量初始化。由于μCOS-ii操作系統(tǒng)中定義了眾多與系統(tǒng)參數有關的全局變量,因此全局變量的初始化包含眾多內容。這些系統(tǒng)參數的初始化大都被封裝 在OSInit()函數中。尤其要注意的是,在OSInit函數中,OSRunning變量一定要被定義成FALSE,否則在OSStart函數中,系統(tǒng) 無法啟動創(chuàng)建的任務,系統(tǒng)因此變成了一個有始有終的函數,創(chuàng)建的任務永遠得不到執(zhí)行。在實際運行過程中表現為主函數運行一次之后,系統(tǒng)不再運行。另外需要 注意的是OSTCBCur、OSTCBList等這幾個變量需要定義為(OS_TCB DT_XDATA *)0的類型。因為這些變量是指向結構體TCB(Task Control Block)的指針,并不是數字〇。

創(chuàng)建空閑任務。創(chuàng)建空閑任務包括進入臨界區(qū)、任務堆棧初始化、TCB初始化、退出臨界區(qū)等內容,大部分是一些簡單的賦值操作,比較簡單,不再贅述。其中OSRdyGrp |= ptcb->OSTCBBitY; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;這兩句話要盡量看懂。因為這兩句話牽扯到后面OSUnMapTbl這個矩陣的理解。其含義為一旦任務就緒隊列中有"1"(即對應的任務就緒),則相應的任務組OSRdyGrp 相應的位變成1,OSRdyTbl中的相應的位也變成1.

堆棧初始化以及任務控制塊初始化。比較容易理解,簡單的賦值操作。不過在堆棧初始化中的ppdata = ppdata;opt = opt; 以及任務控制塊初始化中的pext= pext; stk_size= stk_size;pbos=pbos;opt=opt; id= id;這些語句剛開始的時候很令人費解。其實這些是防止編譯器不斷的報warning,以免影響正常的調試的。

2 任務創(chuàng)建

同上述創(chuàng)建空任務大體雷同。需要注意的是此時操作系統(tǒng)的OSRunning變量還是處于FALSE狀態(tài),因此創(chuàng)建任務的過程中,操作系統(tǒng)并沒有開始運行。 這就是為什么操作系統(tǒng)在開始運行的時候不是選擇第一個創(chuàng)建的任務開始運行,而是從所有的任務里面選擇優(yōu)先級最高的運行的原因。

3 任務調度

任務調度是從OSStart函數開始的。具體包括OSStart、OsStartHighRdy、Task1~n、OSTimeDlyHMSM、OSSched等函數,其中任務交換是在匯編語言文件的OS_TASK_SW函數中運行的。

OsStart在整個系統(tǒng)運行的過程中只會運行一次。在系統(tǒng)創(chuàng)建任務之后運行。主要目的是從任務就緒表中挑選出優(yōu)先級最高的任務,并開始運行優(yōu)先級最高的任務。

OsStartHighRdy為asm文件中的一部分。主要是堆棧的操作。目的是要把高優(yōu)先級任務的任務堆棧復制到寄存器中,為即將開始的運行最高優(yōu)先級的任務做好準備。

Task1~n。Task為一個無限循環(huán)函數。雖然是無限循環(huán)函數,但是與平常前后臺系統(tǒng)中的無限循環(huán)具有區(qū)別。因為μCOS-ii操作系統(tǒng)并不是一個像 Linux那樣的時間片輪流處理的操作系統(tǒng),它僅僅是一個處理完一部分內容之后再去處理另一部分內容的實時操作系統(tǒng)。這就要求在每一個任務的每一個無限循 環(huán)中都要加一個調用OSSched函數的函數。

OSTimeDlyHMSM主要是為用戶提供一個良好的借口,將用戶輸入的時、分、秒、毫秒這四個數據轉換成系統(tǒng)的滴答數,然后調用OSTimeDly實 現。在OSTimeDly中調用OSSched,確保系統(tǒng)的實時性。OSSched函數結構也類似于OSStart,主要是計算出任務就緒表中最高優(yōu)先級 的任務,通過OS_TASK_SW中的堆棧的操作實現任務的交換。

μCOS-ii查找最高優(yōu)先級算法的實現

指導思想:以空間換時間。

在查看源代碼的過程中,最令人費解的或許就是OSUnMapTbl這個矩陣了?,F將此矩陣復制如下:

INT8U const DT_XDATA OSUnMapTbl[] = {

0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,

4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0

};

在了解這個矩陣的工作原理之前,我們有必要了解一下幾個變量的含義:

OSRdyGrp 是一個8位的unsigned char型數。由于該μCOS-ii系統(tǒng)最多允許prio為63,也就是說最多允許有64個優(yōu)先級。64個優(yōu)先級被分成了八組,每組有八個優(yōu)先級。如果有 任何一組中的任務進入了就緒狀態(tài),則該組所對應的位變?yōu)?。比如優(yōu)先級為4,23,56的任務同時進入了就緒態(tài),則對應第0,2,7組中有任務進入了就緒 態(tài),則此時OSRdyGrp 應為 10000101。

OSRdyTbl為一個有8個元素的8位數的數組,分別為OSRdyTbl[0]...OSRdyTbl[7]。從OSRdyTbl[0]到 OSRdyTbl[7]的每一位數對應相應優(yōu)先級的任務是不是進入了就緒態(tài)。還是上面的例子,假如優(yōu)先級為4,23,56的任務進入了就緒態(tài),則 OSRdyTbl[0]的第4位,OSRdyTbl[2]的第7位,OSRdyTbl[7]的第0位變成1,其他的位仍然保持零。

介紹完兩個變量之后,就可以很容易理解這個矩陣的作用了。矩陣的第i個數字表示用二進制表示的i中1所出現的最小位數。比如對于矩陣的第48個數字,48用二進制表示為00110000,在第4位以及第5位中出現了1,故去最小值,則OSUnMapTbl[48]=4 。也就是說,通過查這個矩陣得到的是最小的出現1的位數。假如對于OSRdyGrp 來說,在OSRdyGrp 等于48的情況下,意味著第四組與第五組中有任務處于就緒狀態(tài),則通過此表可以得出最高優(yōu)先級的任務在第四組中。假如對于OSRdyTbl來 說,OSRdyTbl[4]表示第四組中每一個元素是不是處于就緒態(tài)。還是拿48來打比方,假如OSRdyTbl[4]等于48,有48用二進制表示為 00110000可得第四位與第五位中有兩個任務處于就緒態(tài),此時查詢OSUnMapTbl[48]=4可得優(yōu)先級最高的任務處于第四位上。由此很容易理 解這兩行代碼:

y= OSUnMapTbl[OSRdyGrp];

x = OSUnMapTbl[OSRdyTbl[y]];

因此得到的y為最高優(yōu)先級所在的組號。X為最高優(yōu)先級所在的組中最高優(yōu)先級所在的組的組號。由于每組有8個成員,對于y組第x個來說,優(yōu)先級自然是 8*y+x 。由此得到了最高優(yōu)先級。下面的代碼不難理解。

OSPrioHighRdy = (INT8U)((y << 3) + x);

此外,因為這個矩陣無論在何種情況下,都是不變的,因此個人認為原μCOS-ii系統(tǒng)中定義為DT_XDATA完全沒有必要,只是增加了系統(tǒng)的開銷。因此我嘗試將此變量類型改成DT_CODE ,經過運行TMP124的嘗試,系統(tǒng)運行幾十分鐘后仍然正常。因此得出了此處可以改進的建議。而且改進之后系統(tǒng)的占用xdata從600多字節(jié)減少到400多字節(jié),系統(tǒng)資源占用減少很明顯。

可能編寫μCOS-ii的工程師為了提高可移植性,將OSUnMapTbl定義為DT_XDATA吧。僅僅猜測而已。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉