uC/OS-II OS_TASK.C中有关任务管理的函数
函數(shù)大致用途
OS_TASK.C是uC/OS-II有關(guān)任務(wù)管理的文件,它定義了一些函數(shù):建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù),以及獲取有關(guān)任務(wù)的信息。
| OSTaskCreate() | 建立任務(wù) |
| OSTaskCreateExt() | 擴(kuò)展建立任務(wù) |
| OSTaskStkChk() | 堆棧檢驗(yàn) |
| OSTaskDel() | 刪除任務(wù) |
| OSTaskDelReq() | 請求刪除任務(wù) |
| OSTaskChangePrio() | 改變?nèi)蝿?wù)的優(yōu)先級 |
| OSTaskSuspend() | 掛起任務(wù) |
| OSTaskResume() | 恢復(fù)任務(wù) |
| OSTaskQuery() | 獲取有關(guān)任務(wù)的信息 |
狀態(tài)切換圖
OSTaskCreate() and OSTaskCreateExt()
建立任務(wù)函數(shù),一旦任務(wù)建立就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。
任務(wù)可以在多任務(wù)開始之前建立,也可以是動(dòng)態(tài)地被一個(gè)運(yùn)行著的任務(wù)建立。
如果一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而這個(gè)任務(wù)的優(yōu)先級高于建立它的那個(gè)任務(wù),這時(shí),這個(gè)剛剛建立的任務(wù)將立即得到CPU控制權(quán)。
OSTaskDel()
將任務(wù)轉(zhuǎn)入睡眠態(tài)。
它可以由本任務(wù)執(zhí)行,也可以由另一個(gè)任務(wù)調(diào)用該函數(shù)使本任務(wù)進(jìn)入睡眠態(tài)
OSTaskSuspend() and OSTaskResume()
掛起任務(wù)和恢復(fù)任務(wù):將任務(wù)轉(zhuǎn)入掛起態(tài)、將任務(wù)從掛起態(tài)轉(zhuǎn)入就緒態(tài)。
一些延遲函數(shù)和事件函數(shù)也可以完成任務(wù)到掛起狀態(tài)的轉(zhuǎn)換。
OSTaskChangePrio()
改變?nèi)蝿?wù)的優(yōu)先級。
它本身不改變?nèi)蝿?wù)狀態(tài),但是可能會(huì)影響任務(wù)的狀態(tài)。
例:執(zhí)行任務(wù)將就緒任務(wù)的優(yōu)先級改的比自己高,這樣cpu的控制權(quán)就會(huì)立刻被轉(zhuǎn)到那個(gè)任務(wù)手中
OSTaskStkChk()
為了避免為任務(wù)分配過多的堆棧空間,從而減少自己的應(yīng)用程序的代碼所需內(nèi)存數(shù)量。這時(shí)就需要獲取任務(wù)實(shí)際所需的堆棧空間大小。
本函數(shù)的操作:順著堆棧的棧底開始計(jì)算空閑的堆棧空間大小,具體實(shí)現(xiàn)方法是統(tǒng)計(jì)存儲(chǔ)值為0的連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)存儲(chǔ)值不為0的堆棧入口
OSTaskQuery()
該函數(shù)通過檢查對應(yīng)任務(wù)的任務(wù)控制塊中的內(nèi)容來得到任務(wù)的信息。
可以獲取自身或其他應(yīng)用任務(wù)的信息。
OSTaskIdle()
當(dāng)所有任務(wù)都不在就緒態(tài)中,操作系統(tǒng)將執(zhí)行空閑任務(wù)的函數(shù)OSTaskIdle()。
這個(gè)函數(shù)由系統(tǒng)定義,不能刪除、掛起或者改變優(yōu)先級。
有關(guān)中斷
如果中斷沒有被禁止,正在運(yùn)行的任務(wù)是可以被中斷的。任務(wù)被中斷后,進(jìn)入中斷服務(wù)態(tài)(ISR).響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)處于掛起態(tài),中斷服務(wù)子程序控制了系統(tǒng)的控制權(quán)。
中斷服務(wù)程序完成后,不一定返回到被中斷的任務(wù)。
因?yàn)閡C/OS-II總是執(zhí)行就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù)。由于中斷服務(wù)程序的執(zhí)行,可能使被中斷的程序不是就緒態(tài)任務(wù)中優(yōu)先級最高的。
例如下面幾個(gè)情況:
1、中斷服務(wù)程序利用了時(shí)間的發(fā)生,而使得一個(gè)或讀個(gè)更高優(yōu)先級任務(wù)進(jìn)入就緒態(tài)
2、中斷服務(wù)程序建立或者恢復(fù)了一個(gè)新的高優(yōu)先級任務(wù)
3、中斷程序掛起了被中斷的任務(wù)。
一般來說中斷服務(wù)程序不會(huì)干涉任務(wù)的調(diào)度,所以后兩種情況不會(huì)經(jīng)常發(fā)生。第一種情況比較常見
總結(jié)
以上是生活随笔為你收集整理的uC/OS-II OS_TASK.C中有关任务管理的函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当贝盒子B1适合老人使用吗?
- 下一篇: 二分法变种小结(leetcode 34、