UCOS 中的优先级判定

UCOS中优先级判定

UCOS 中的优先级判定

图1

UCOS 中的优先级判定

图2

如上图12所示,OSRdyGrp确定了优先级的次低三位(bit5-bit3)OSOSRdyTbl确定了优先级的低三位(bit2-bit0)

OSRdyGrp = 0x011;  //0b00010001 此处表示D0D4位被置位1及存在OSRdyTbl[0]OSRdyTbl[4]两个组包含优先级

OSRdyTbl[0] = 0x0a; //0b00001010 此处表示在该OSRdyTbl[0]组中,D0D4位被置位1,存在两个优先级prio,结合计算得出D00*8+1=1, D40*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所示:

UCOS 中的优先级判定

图3