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的地方