新闻  |   论坛  |   博客  |   在线研讨会
uCOS II就绪表(Ready List)分析
tongxin | 2009-05-17 14:51:06    阅读:780   发布文章

      3.0 就绪表(Ready List)
    每个任务被赋予不同的优先级等级,从0级到最低优先级OS_LOWEST_PR1O,包括0和OS_LOWEST_PR1O在内(见文件OS_CFG.H)。当uCOS II初始化的时候,最低优先级OS_LOWEST_PR1O总是被赋给空闲任务idle task。注意,最多任务数目OS_MAX_TASKS和最低优先级数是没有关系的。用户应用程序可以只有10个任务,而仍然可以有32个优先级的级别(如果用户将最低优先级数设为31的话)。
    每个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量OSRedyGrp和OSRdyTbl[]。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl[]中的相应元素的相应位也置位。就绪表OSRdyTbl[]数组的大小取决于OS_LOWEST_PR1O(见文件OS_CFG.H)。当用户的应用程序中任务数目比较少时,减少OS_LOWEST_PR1O的值可以降低uCOS II对RAM(数据空间)的需求量。
    为确定下次该哪个优先级的任务运行了,内核调度器总是将OS_LOWEST_PR1O在就绪表中相应字节的相应位置1。OSRdyGrp和OSRdyTbl[]之间的关系见图3.3,是按以下规则给出的:
    当OSRdyTbl[0]中的任何一位是1时,OSRdyGrp的第0位置1,
    当OSRdyTbl[1]中的任何一位是1时,OSRdyGrp的第1位置1,
    当OSRdyTbl[2]中的任何一位是1时,OSRdyGrp的第2位置1,
    当OSRdyTbl[3]中的任何一位是1时,OSRdyGrp的第3位置1,
    当OSRdyTbl[4]中的任何一位是1时,OSRdyGrp的第4位置1,
    当OSRdyTbl[5]中的任何一位是1时,OSRdyGrp的第5位置1,
    当OSRdyTbl[6]中的任何一位是1时,OSRdyGrp的第6位置1,
    当OSRdyTbl[7]中的任何一位是1时,OSRdyGrp的第7位置1,
 
      程序清单3.5中的代码用于将任务放入就绪表。Prio是任务的优先级。

 

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

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客