摘要:1.2使任務進入空閑態μC/OS通過任務就緒表OSRdyTbl[prio》3](prio代表任務優先級)中相應位清零使相應任務進入空閑態,當OSRdyTbl[prio》3]中的所有位都為零時,還需將OSRdyGrp的相應位清零,代表全組任務中沒有一個任務進入就緒態。1.3查找當前處于就緒態的較高優先級任務μC/OS采用查表法查找當前處于就緒態的較高優先級任務,
1.2 使任務進入空閑態
μC/OS通過任務就緒表OSRdyTbl[prio》3](prio代表任務優先級)中相應位清零使相應任務進入空閑態,當OSRdyTbl[prio》3]中的所有位都為零時,還需將OSRdyGrp的相應位清零,代表全組任務中沒有一個任務進入就緒態。
1.3 查找當前處于就緒態的較高優先級任務
μC/OS采用查表法查找當前處于就緒態的較高優先級任務,它預先定義了數組OSUnMapTbl[]作為查找表,如下:
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
};
相應的查找程序如下:
High3=OSUnMapTbl[OSRdyGrp];//優先級高3位,即當前處于就緒態的較高優先級的任務的組號
Low3=OSUnMapTbl[OSRdyTbl[High3]];//優先級低3位
prio=(Hign3《3)+Low3;//獲得當前處于就緒態的較高優先級的任務
例如:若OSRdyGrp的值為01101000b,則查得OSUnMapTbl[OSRdyGrp]的值是3,它對應于OSRdyGrp中的第3位置1(即當前處于就緒態的較高優先級任務處于第1組任務中);若OSRdyTbl[3]的值是11100100b,則查OSUnMapTbl[OSRdyTbl[3]]的值是2,則進入就緒態的較高任務的優先級prio=3×8+2=26.
從上文的計算可看出μC/OS查找當前較高優先級任務所花的時間為常數,與應用程序中建立的任務數無關,這個特性是本文實現新型嵌入式數據管理的關鍵。[1] [2] [3] [4]
溫馨提示:因考試政策、內容不斷變化與調整,本網站提供的以上信息僅供參考,如有異議,請考生以權威部門公布的內容為準!