简约而不简单。
分类: LINUX
2013-04-26 15:18:26
y=OSUnMapTal[OSRdyGrp];//获得优先级别的D5、D4、D3位
x=OSUnMapTal[OSRdyTbl[y]]; //获得优先级别的D2、D1 、D0位
prio=(y<<3)+x;
prio是表示优先级的一个无符号八位数,不过只有低六位有效。prio与就绪任务表的两个数组的关系是这样的:prio高三位表示组数,即OSRdyGrp[]中的哪一位是一。低三位表示这一组中的位数,即OSRdyTbl[]中的哪一位是一。例如,如果prio是00011001,即优先级是25。则OSRdyGrp[]中的第三位是被置一的,OSRdyTbl[]中的第一位是被置一的。
由于有可能有很多任务是处于就绪状态的,也就是说OSRdyGrp[]和OSRdyTbl[]中均有可能不止一位是被置一的。由于优先级的数字越小,级数越高,所以要从这些就绪的任务中找出优先级最高的任务,就需要找出这两个数组中被置为一的最低位。
OSUnMapTbl[]的作用就是将一个8位2进制数通过数组的形式通过查表的方式知道最低的位置。