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