ucos---优先级
ucos是一个preemptive多任务实时内核,包括任务管理、时间管理、事件管理、内存管理等模块。
任务是一个无限循环的函数,优先级也是它的ID,数据结构是OS_TCB。
优先级:数字越小优先级越高
ucos中该表由OSRdyGrp和OSRdyTbl[]两个变量替代。在调度过程中,寻找优先级最高的任务就是判断最低位的过程。
假设OSRdyGrp=0b01000101(0x45),说明有3个组都有ready task;
OSRdyTbl[0] = 0b00010010; //第0组有2个任务ready,优先级分别是0*8+1和0*8+4;
OSRdyTbl[2] = 0b01010100; //第2组有3个任务ready,优先级分别为2*8+2/2*8+4/2*8+6;
OSRdyTbl[6] = 0b00001000; //第6组有1个任务ready,优先级为6*8+4;
以上计算通过OSUnMapTbl查表完成(OSUnMapTbl存储了0~255数字最低位的位数,OSUnMapTbl[6]=1, OSUnMap[32]=5)
OSUnMapTbl[OSRdyGrp]=0;
OSUnMapTbl[OSRdyTbl[0]]=1;
就绪状态任务中最高优先级为0*8+1;