新闻  |   论坛  |   博客  |   在线研讨会
uCos任务就绪的算法
patton | 2008-05-14 13:05:17    阅读:1715   发布文章

1.使任务进入就绪态

OSRdyGrp            |= OSMapTbl[prio >> 3];
 
OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
 


2.从就绪表中删除一个任务

if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)
 
    OSRdyGrp &= ~OSMapTbl[prio >> 3];
 


3.找出进入就绪态的优先级最高的任务

y    = OSUnMapTbl[OSRdyGrp];
 
x    = OSUnMapTbl[OSRdyTbl[y]];
 
prio = (y << 3) + x;
 


4.uC/OS中的"OSUnMapTbl[]"的产生:
INT8U const OSUnMapTbl[] ={
0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
}


这个表中的元素值表示该元素的索引的最低为1位的位置。例如,第4个元素,其索引值4的二进制表示为(00000100), 其最低为1的位是第2位,所以第4个元素值是2。再比如第5个元素,其索引值5的二进制表示为(00000101),其最低为1的位是第0位,所以第5个元素值为0。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客