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