uC/OS-II 學(xué)習(xí)筆記之:任務(wù)的概念
一、任務(wù):一個(gè)任務(wù),也叫一個(gè)線程,是一個(gè)簡單程序,改程序可以認(rèn)為CPU完全只屬于自己。每個(gè)任務(wù)都是整個(gè)應(yīng)用的某一部分,
本文引用地址:http://butianyuan.cn/article/201609/303414.htm每個(gè)任務(wù)被賦予一定的優(yōu)先級(jí),有它自己的一套CPU寄存器和??臻g。
二、多任務(wù):多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際是靠CPU在許多任務(wù)之間轉(zhuǎn)換、調(diào)度。CPU輪流服務(wù)于一系列任務(wù)中的某一個(gè)。
三、任務(wù)狀態(tài):每個(gè)任務(wù)都是一個(gè)無限循環(huán)。每個(gè)任務(wù)都處在以下5種狀態(tài)之一:
1)睡眠態(tài):任務(wù)只是以代碼的形式駐留在程序空間(ROM或RAM),還沒有交給操作系統(tǒng)管理時(shí)的情況叫做睡眠態(tài)(也稱休眠態(tài))。
簡單說,任務(wù)在沒有被配備任務(wù)控制塊或被剝奪了任務(wù)控制塊時(shí)的狀態(tài)叫做任務(wù)的睡眠態(tài)。
2)就緒態(tài):如果系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就續(xù)表中進(jìn)行了就緒登記,則任務(wù)就具備了運(yùn)行的充分條件,
這時(shí)任務(wù)的狀態(tài)就叫做就緒態(tài)。
3)運(yùn)行態(tài):處于就緒態(tài)的任務(wù)如果經(jīng)調(diào)度器的判斷獲得了CPU的使用權(quán),則任務(wù)就進(jìn)入運(yùn)行狀態(tài)。
注:任何時(shí)刻只能有一個(gè)任務(wù)處于運(yùn)行態(tài),就緒的任務(wù)只有當(dāng)所有優(yōu)先級(jí)高于本任務(wù)的任務(wù)都轉(zhuǎn)為等待狀態(tài)時(shí),才能進(jìn)入運(yùn)行態(tài)。
4)等待態(tài):正在運(yùn)行的任務(wù),需要等待一段時(shí)間或需要等待一個(gè)事件發(fā)生再運(yùn)行時(shí),該任務(wù)就會(huì)把CPU的使用權(quán)讓給其它任務(wù)而使任務(wù)進(jìn)入等待態(tài)(也稱阻塞態(tài))。
5)中斷態(tài):一個(gè)正在運(yùn)行的任務(wù)一旦響應(yīng)中斷申請(qǐng)就會(huì)中止運(yùn)行而去執(zhí)行中斷服務(wù)程序,這時(shí)任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)(也稱掛起態(tài))。
四、任務(wù)不是普通的C語言函數(shù),因此不能被主函數(shù)或其它函數(shù)調(diào)用,主函數(shù)只負(fù)責(zé)創(chuàng)建和啟動(dòng)它們,而由操作系統(tǒng)負(fù)責(zé)來調(diào)度運(yùn)行它們。
五、uC/OS-II中預(yù)定義了兩個(gè)為應(yīng)用程序服務(wù)的系統(tǒng)任務(wù):空閑任務(wù)和統(tǒng)計(jì)任務(wù)。
其中空閑任務(wù)是每個(gè)應(yīng)用程序必須使用的,而統(tǒng)計(jì)任務(wù)是應(yīng)用程序根據(jù)實(shí)際需要來選擇使用的。
六、任務(wù)的組成:任務(wù)控制塊、任務(wù)代碼、任務(wù)堆棧。
七、創(chuàng)建任務(wù)的函數(shù):
INT8U OSTaskCreate (
void (*task)(void *pd),//定義一個(gè)函數(shù)指針
void *pdata,//傳遞給任務(wù)的參數(shù)
OS_STK *ptos,//任務(wù)堆棧棧頂?shù)闹羔?/p>
INT8U prio//指定任務(wù)優(yōu)先級(jí)的參數(shù)
)
參: 任哲 《嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II原理及應(yīng)用》
參: 盧有亮 《嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS原理與實(shí)踐》
評(píng)論