對任務就緒表的操作了解:
将優先級别為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]操作功能剛好相反。