UCOS 中的优先级判定
UCOS中优先级判定
图1
图2
如上图1与2所示,OSRdyGrp确定了优先级的次低三位(bit5-bit3),OSOSRdyTbl确定了优先级的低三位(bit2-bit0)。
OSRdyGrp = 0x011; //0b00010001 此处表示D0位D4位被置位1,及存在OSRdyTbl[0]和OSRdyTbl[4]两个组包含优先级。
OSRdyTbl[0] = 0x0a; //0b00001010 此处表示在该OSRdyTbl[0]组中,D0位D4位被置位1,存在两个优先级prio,结合计算得出D0位0*8+1=1, D4位0*8+3=3。
OSRdyTbl[4] = 0x01; //0b00000001 表示该OSRdyTbl[4]组中,D0位存在优先级,计算出4*8+0=32。
假设OSRdyGrp最低位为1的是X位,OSRdyTbl[X]最低为1的是Y位, 则优先级=X*8+Y 。
在ucos中为了查找快速,定义了如下的一个数组,因为8位参数的取值为0—255,所以它一共有256个值。OSUnMapTbl数组中元素OSUnMapTbl[n]表示一个任意的8位无符号数n对应的最低位为1的那个最低位数,例如:
二进制数00000010B,D1位为I为1,n就为1;
二进制数00000011B,D0位为1,n就为0;
二进制数00000100B,D2位为1,n就为2;
具体查表如图3所示:
图3