uC/OS II 提供給用戶通用接口函數(shù)都在Ucos_ii.h中【uC/GUI 提供給用戶通用接口函數(shù)都在INC包含的各個頭文件中,使用時參考官方的手冊用就好了,有中文版的】;
INT8U const OSUnMapTbl[256] = {
}
【這個表的通俗用法就是 給出 給任意一個長度不超過8位的二進(jìn)制值a, 將這個a做為該數(shù)組的索引, OSUnMapTb[a]就表示二進(jìn)制值a中第一個位1出現(xiàn)的位置】
這個數(shù)組的 索引值 從 0~255;
即通過這個數(shù)組 可以直接獲取0~255各值的二進(jìn)制形式從右到左第一次出現(xiàn)1的位置
Ucosii 中任務(wù)的優(yōu)先級管理方法(假設(shè)最多64個任務(wù)):
因?yàn)?/span>OSUnMapTbl是256個元素,也就是索引是8位的二進(jìn)制值,這個索引的每一位的0 1 值代表的是對應(yīng)的任務(wù)是否就緒;
因此管理任務(wù)的最小單位為INT8U(也就是8個任務(wù)用8個位來組成一個INT8U);
依次類推:可用一個INT8U來表示某個最小單元中是否有就緒態(tài)的任務(wù)(即該INT8U是否為0)
這樣就是 8X8 = 64個任務(wù);
依次往上類推,8X8X….X8,理論上在空間足夠的情況下可以管理無限個任務(wù);
具體的優(yōu)先級值的算法就是:
其實(shí)Ucosii 任務(wù)數(shù)大于64個時,他是16個任務(wù)為一組,組成INT16U來管理的
同樣往上推,也是16組來管理的
16X16
if ((*ptbl & 0xFFu) != 0u) {
} else {
//如果低8位為0,直接在高8位中去尋找第一次出現(xiàn)1的地方,然后加8 就表示整個16位的INT16U中第一次出現(xiàn)1的地方