標題: 關于uCOS-ll中就緒狀態(tài)表的理解 [打印本頁]
作者: 今夜就不該來 時間: 2018-4-24 10:42
標題: 關于uCOS-ll中就緒狀態(tài)表的理解
μC/OS_II進行任務調度的思想是 “近似地每時每刻總是讓優(yōu)先級最高的就緒任務處于運行狀態(tài)” 。為了保證這一點,它在系統(tǒng)或用戶任務調用系統(tǒng)函數(shù)及執(zhí)行中斷服務程序結束時總是調用調度器,來確定應該運行的任務并運行它。μC/OS_II進行任務調度的依據(jù)就是任務就緒表
為了能夠使系統(tǒng)清楚地知道,系統(tǒng)中哪些任務已經就緒,哪些還沒有就緒,μC/OS_II在RAM中設立了一個記錄表,系統(tǒng)中的每個任務都在這個表中占據(jù)一個位置,并用這個位置的狀態(tài)(1或者0)來表示任務是否處于就緒狀態(tài),這個表就叫做任務就緒狀態(tài)表,簡稱叫任務就緒表
任務就緒表就是一個二維數(shù)組OSRdyTbl[ ]
y = OSUnMapTal[OSRdyGrp]; //D5、D4、D3位
x = OSUnMapTal[OSRdyTbl[y]]; //D2、D1、D0位
prio = (y<<3)+x; //優(yōu)先級別
INT8U const 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
};
所以就有了uCOS-II的神來之筆,unsigned int類型的變量可以看做是長度為32的bool型數(shù)組,如果將這個數(shù)組從一維定義到二維,那么定義的任務數(shù)量將翻倍增長。如果這個二維數(shù)組的列數(shù)為8,那么8位二進制數(shù)剛好可以用unsigned char來表示,那么定義一個一維的unsigned char數(shù)組就可以表示這種二維的bool型數(shù)組,uCOS-II總共可以管理64個任務,那么unsigned char數(shù)組的長度為8,便可以定義出64個任務,剛好滿足要求。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |