1. 程式人生 > >Ucos-ii中獲取最高優先順序的原理(任務和事件)

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

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。