?? ucos任務(wù)機(jī)制.txt
字號(hào):
uc/os任務(wù)機(jī)制2007-09-03 11:261. 任務(wù)是一個(gè)無返回的無窮循環(huán)。uc/os-ii總是運(yùn)行進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)。
2. 任務(wù)是如何調(diào)度(切換)的?
因?yàn)閡c/os-ii總是運(yùn)行進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)。所以,確定哪個(gè)任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行,這個(gè)工作就是由調(diào)度器(scheduler)來完成的。
任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成的,而中斷級(jí)的調(diào)度是由函數(shù)OSIntExt()完成。對(duì)于OSSched(),它內(nèi)部調(diào)用的是OS_TASK_SW()完成實(shí)際的調(diào)度(人為模仿一次中斷);OSIntExt()內(nèi)部調(diào)用的是OSCtxSw()實(shí)現(xiàn)調(diào)度。參考:P92,P106
任務(wù)切換其實(shí)很簡單,由如下2步完成:(1)將被掛起任務(wù)的處理器寄存器推入自己的任務(wù)堆棧。(2)然后將進(jìn)入就緒狀態(tài)的最高優(yōu)先級(jí)的任務(wù)的寄存器值從堆棧中恢復(fù)到寄存器中。參見P92
(1)作為uc/os-ii的一條普通原則,調(diào)用uc/os-ii功能函數(shù)時(shí),中斷總應(yīng)當(dāng)是開著的。
(2)任務(wù)永不返回,就算任務(wù)自我刪除,也絕對(duì)不會(huì)返回。(任務(wù)刪除并非代碼刪除,只是ucos-ii不會(huì)理會(huì)這任務(wù)。)
(3)OSTimeTick()函數(shù)是ucos-ii內(nèi)部函數(shù),用戶無需調(diào)用。
(4)ucos-ii從中斷返回之前,要判斷被中斷的任務(wù)是否還是就緒狀態(tài)任務(wù)中優(yōu)先級(jí)最高的任務(wù)。 3. OSInit()初始化示意圖
我做了一個(gè)很好的圖示,竟然粘貼不出來,沒辦法...
4. 任務(wù)的5種狀態(tài)
睡眠態(tài)(task dormat):任務(wù)駐留于程序空間(rom或ram)中,暫時(shí)沒交給ucos-ii處理。
就緒態(tài)(task ready):任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)。
運(yùn)行態(tài)(task running):調(diào)用OSStart()可以啟動(dòng)多任務(wù)。OSStart()函數(shù)只能調(diào)用一次,一旦調(diào)用,系統(tǒng)將運(yùn)行進(jìn)入就緒態(tài)并且優(yōu)先級(jí)最高的任務(wù)。
等待狀態(tài)(task waiting):正在運(yùn)行的任務(wù),通過延遲函數(shù)或pend(掛起)相關(guān)函數(shù)后,將進(jìn)入等待狀態(tài)。
中斷狀態(tài)(ISR running):正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)閉或者ucos-ii將中斷關(guān)閉。
5. 任務(wù)控制塊(OS_TBC)
任務(wù)一旦建立,任務(wù)控制塊OS_TBC將被賦值。
OS_TBC是一個(gè)數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU使用權(quán)被剝奪后,ucos-ii將把當(dāng)前的任務(wù)狀態(tài)存放于OS-TBC數(shù)據(jù)結(jié)構(gòu)中;當(dāng)任務(wù)的CPU使用權(quán)得到恢復(fù)后,任務(wù)控制塊能確保任務(wù)能從被中斷點(diǎn)那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行。
每個(gè)任務(wù)都有自己的OS_TBC控制塊,OS_TBC的數(shù)量由OS_MAX_TASK決定,任務(wù)數(shù)量少,當(dāng)然OS_TBC占用RAM的空間就少。
所有的任務(wù)控制塊OS_TBC都是放在任務(wù)控制塊列表數(shù)組OSTCBTbl[]中。在ucos-ii初始化時(shí),所有任務(wù)控制塊OS_TBC都被鏈表連接成單向空任務(wù)鏈表。
注意:OS_TBC全部駐留于RAM中。
6. 關(guān)于任務(wù)切換使用到的OS_TASK_SW()函數(shù),其中調(diào)用軟中斷實(shí)現(xiàn)寄存器的保持和彈出。開始調(diào)用含軟中斷,ucos-ii強(qiáng)制處理器保存psw、pc的當(dāng)前值,最后通過執(zhí)行中斷返回指令,pc和psw的值裝回到cpu中。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -