對任務就緒表的操作理解:

將優先級別為prio的任務置為就緒狀態,可使用如下程式碼

OSRdyGrp |= OSMapTbl[prio >>3];//將prio任務所在的組狀態置為1,表示該組有任務就緒。

OSRdyTbl[prio>>3] |= OSMapTbl[prio&0x07];//將就緒表中prio任務對應的位置為1,表示該優先順序為prio的任務就緒。

其中OSMapTbl[]是uc/os-ii為加快運算速度定義的一個數組,它的各元素值為:

OSMapTbl[0] = 00000001B

OSMapTbl[1] = 00000010B

OSMapTbl[2] = 00000100B

OSMapTbl[3] = 00001000B

OSMapTbl[4] = 00010000B

OSMapTbl[5] = 00100000B

OSMapTbl[6] = 01000000B

OSMapTbl[7] = 10000000B

要使優先順序為prio的任務脫離就緒狀態,可使用如下程式碼

if ((OSRdyTbl[prio>>3] &= ~OSMapTbl[prio&0x07]) == 0)

{

       OSRdyGrp &= ~OSMapTbl[prio >>3];

}

其中OSRdyTbl[prio>>3] &=~OSMapTbl[prio&0x07]是將就緒表OSRdyTbl中優先順序為prio的任務所在的元素OSRdyTbl[prio>>3]對應優先順序為prio的任務的位([prio&0x07)

置為0,與上面的OSRdyTbl[prio>>3] |= OSMapTbl[prio&0x07]操作功能剛好相反。

改操作執行完畢後判斷就緒表元素OSRdyTbl[prio>>3]是否為0,如果等於0,表示該元素對應的組的8個任務全部沒有就緒,於是將OSRdyGrp對應的表示該組就緒狀態的位

置為0,表示該組沒有任務處於就緒狀態,與上面的OSRdyGrp |= OSMapTbl[prio >>3]操作功能剛好相反。

.