Ucos ii中獲取最高優先順序的原理(任務和事件)

2021-05-27 05:46:56 字數 1275 閱讀 9448

ucos-ii中獲取最高優先順序的原理(任務和事件)

2009-08-02 19:12

1.      任務優先順序表是按照由左至右,由上至下的順序增長的,且優先順序號越小優先順序越高。

2.      任務優先順序儲存在乙個位元組型陣列裡,陣列大小為8,其還有乙個行表,即乙個位元組單元,用於確定在陣列的哪行有任務。

3.      任務優先順序由乙個位元組的低6個bit組成,其最低優先順序為2^6-1 = 63(優先順序範圍為0~63),其中高3bit對應行表,低3bit對應陣列中某位元組單元。

4.      位掩碼osmaptbl[8],下標0~7對應值00000001、00000010、00000100、00001000、00010000、00100000、01000000、10000000,其作用是遮蔽其他bit值,下標0~7對應行表(高3位)和優先順序表(低3位)。

5.      osunmaptbl陣列用於查詢最高優先順序,其經過精心設計。

首先,找行錶值在osunmaptbl中的對應位置的值x

然後,找優先順序表第x行值在osunmaptbl中對應位置的值y

—查詢方法:由於行錶值為8bit,則高4bit對應osunmaptbl中行值,低4bit對應osunmaptbl中列值;對應優先順序表查詢方法同行表查詢方法。

最後,prio = x<<3 + y。

注:osunmaptbl陣列構造方法:

--由優先順序表的構造,即越靠左越靠上的優先順序越高可知:

1.低4bit無值,那麼就高4bit的最低為1值的位確定-例:0000-0, 0001-4, 0010-5,0011-4……

2.低4bit有值,那麼就低4bit的最低為1值的位確定-例:00000000-0,10010001-0,00111010-1,00001011-0……

3.由1和2有第1列值為0,4,5,4,6,4,5,4,7,4,5,4,6,4,5,4;第2列全為0,第3列全為1,第4列全為0,第5列全為2,第6列全為0,第7列全為1,第8列全為0,第9列全為3,第10列全為0,第11列全為1,第12列全為0,第13列全為2,第14列全為0,第15列全為1,第16列全為0。

uC OS II任務排程中判斷最高優先順序

uc os ii中,規定最多可以有64 個任務。每個任務的優先順序不能相同,因此,優先順序為 0 63.數字越小,優先順序越高,那麼 0就是最高優先順序,63就是最低優先順序。系統保留了優先順序最高及最低的各 4個,因此使用者不能使用這 8個優先順序作為自己的任務的優先順序。巨集 os lowest...

對uC OS II查詢最高優先順序就緒任務演算法的理解

因為最近想在 stm32 上跑作業系統,所以開始學習 uc os ii。正好這學期有嵌入式實時作業系統這門課,但上課的教材內容是廣義上的嵌入式實時作業系統,所以我在圖書館借了任哲老師的這本 嵌入式實時作業系統 uc os ii 原理及應用 這本書。最近看到任務就緒表及任務排程這部分,關於對任務就緒表...

UCOSii如何解決優先順序反轉

優先順序反轉時如何產生的 當出現低優先順序的任務與高優先順序的任務使用同一訊號量,而系統中還存在其他中等優先順序別的任務時,如果低優先順序的任務先獲得了訊號量,就會使高優先順序的任務處於等待狀態,而那些不使用該訊號量的中等任務卻可剝奪低優先順序的任務的cpu使用權而先於高優先順序的任務而執行了。解決...