OSRdyGrp确定了优先级的次低三位(bit5-bit3),OSOSRdyTbl确定了优先级的低三位(bit2-bit0),
OSRdyGrp = 0x011; //0b00010001
OSRdyTbl[0] = 0x0a; //0b00001010
OSRdyTbl[4] = 0x01; //0b00000001
计算出存在的几个优先级为;0*8+1=1,0*8+3=3,4*8+0=32
假设OSRdyGrp最低位为1的是X位,OSRdyTbl[X]最低为1的是Y位,
则优先级=X*8+Y
因此只要知道了上述的X,Y就可算出最高优先级
OSUnMapTbl就是将0x00-0xff每个数据中最低位为1的位数一一列举出来
INT8U const OSUnMapTbl[256] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F */
//OSUnMapTbl[0]
//OSUnMapTbl[1] 1 bit0
//OSUnMapTbl[2] 2 bit1
//OSUnMapTbl[3] 3 bit0
//................
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x10 to 0x1F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x20 to 0x2F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x30 to 0x3F */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x40 to 0x4F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x50 to 0x5F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x60 to 0x6F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x70 to 0x7F */
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x80 to 0x8F */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x90 to 0x9F */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xA0 to 0xAF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xB0 to 0xBF */
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xC0 to 0xCF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xD0 to 0xDF */
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0xE0 to 0xEF */
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 /* 0xF0 to 0xFF */
};
X = OSUnMapTbl[OSRdyGrp];
Y = OSUnMapTbl[OSRdyTbl[X]];
最高优先级为X*8+Y
注:
X = OSUnMapTbl[OSRdyGrp];
此句的试举例以得此推论(只找从低位起,首次出现就绪标志“1”的那个座位号,从0号数起....):
如:OSRdyGrp=0x00;%00000000,<-字节里没有出现“1”,默认OSUnMapTbl[1]表中第1号元素,位置号为0
如:OSRdyGrp=0x01;%00000001,<-字节里第0位出现“1”,即OSUnMapTbl[1]表中第1号元素,位置号为0
如:OSRdyGrp=0x02;%00000010,<-字节里第1位出现“1”,即OSUnMapTbl[2]表中第2号元素,位置号为1
如:OSRdyGrp=0x03;%00000011,<-字节里第0位出现“1”,即OSUnMapTbl[3]表中第3号元素,位置号为0
如:OSRdyGrp=0x04;%00000100,<-字节里第1位出现“1”,即OSUnMapTbl[4]表中第4号元素,位置号为2
...........
...........
以 此推之便得到unUnMapTbl[]表,该表的最重要的作用:就是放进一个字符型数据(不大于255的数),就可以找到该数据 最低位是“1”的是哪个位!以此将就绪组放进去,查到的是最低就绪组,找到最低就绪组x后,再把改组的数据放进去,然后查到的是最低就绪组里的数据的最低 位是“1”的是哪个位y........
那么:最高优先级为X*8+Y 解决!!