初開兩三遍ucos優先順序與任務編號
。)os_ext int8u osrdygrp; /* ready list group */
os_ext int8u osrdytbl[8]; /* table of tasks which are ready to run */
int8u const osunmaptbl[256] = ;
解釋-1:
如果0~7之間任何乙個任務就緒,osrdygrp的第0位置1。
如果8~15之間任何乙個任務就緒,osrdygrp的第1位置1。
......(依次類推)
解釋-2:
osrdytbl[0] 的8位對應於任務#0~7, 如果第0位是1表明任務#0就緒;第1位是1表明任務#1就緒......
osrdytbl[1] 的8位對應於任務#8~15, 如果第0位是1表明任務#8就緒;第1位是1表明任務#9就緒.....
舉例:
假設任務#25號就緒,那將它加入就緒表的**是(b表示二進位制):
y = (25>>3); // 0x3
osrdygrp |= 1 osrdytbl[(25>>3)] |= 1 《把任務移出就緒隊立做相應的反操作,只是當osrdytbl[n]為0時,要把osrdygrp 第n位置0。
如何找最高優先順序任務:
假設現在25,27,32號任務就緒,那
osrdygrp == 00011000b.
osrdytbl[3] == 00001010b;
osrdytbl[4] == 00000001b;
顯然我們要求出osrdygrp 從右向左第乙個1的位置, 應當是3。你可以通過移位實現,但如果有一張表,一查便知就快多了。於是有
y = osunmaptbl[osrdygrp] ;// osunmaptbl[00011000b] == osunmaptbl[24] == 3
同理,求出osrdytbl[3] 從右向左第乙個1的位置, 應當是1。
x=osunmaptbl[ osrdytbl [y] ];//osunmaptbl[00001010b] == osunmaptbl[10] ==1
有了x,y再求優先順序用很容易了。
priority = y * 8 + x;
再從優先順序即可找到tcb!!!
ucos 四 優先順序
define os lowest prio 7 定義最小優先順序 小於63 define os stat prio os lowest prio 1 統計任務 可選 define os idle prio os lowest prio 空閒任務 必須 優先順序最低 osinit 呼叫如下 os in...
uC OS優先順序反轉及解決
1 uc os ii的執行機制 在嵌入式系統的應用中,實時性是乙個重要的指標,而優先順序翻轉是影響系統實時性的重要問題。本文著重分析優先順序翻轉問題的產生和影響,以及在uc os ii中的解決方案。uc os ii採用基於固定優先順序的佔先式排程方式,是乙個實時 多工的作業系統。系統中的每個任務具有...
Ucos作業系統任務優先順序分配原則
ucos是乙個可剝奪性核心的作業系統。所以每乙個任務都必須有乙個優先順序。ucos作業系統中任務的優先順序使用乙個8位整型資料來表示的。比如我們的0,1,2,3這些數,ucos任務優先順序的取值範圍為 0 os lowest prio之間,數字越小,優先順序越大。靜態優先順序 這個優先順序被分配以後...