ucos 就绪表(Ready List):任务设置,清除和查表最高优先级任务

这篇博客详细介绍了uCOS操作系统中就绪表的工作原理,包括如何设置、清除任务的就绪状态以及如何查找最高优先级的任务。通过OSRdyGrp和OSRdyTbl[]变量,解释了如何组织和管理不同优先级的任务,以及如何优化内存需求。
摘要由CSDN通过智能技术生成

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,
 一句话:OSRdyTbl[]这个数组的任何一个数非0时,OSRdyGrp相应(通过OSTblMap映射:0-7这八个数字和一个8位的8个位从低到高对应)的位置一。

程序清单3.5中的代码用于将任务放入就绪表。Prio是任务的优先级。
 

 
图3.3 uCOS II就绪表

程序清单 L3.5 使任务进入就绪态 

代码
  1. OS_EXT INT8U    OSRdyGrp;              /* Ready list group                         */<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值