uc/os学习笔记1【uc/os的任务管理】

 

uc/os的任务管理

        uc/os每个任务被赋予不同的优先级等级,从0级到最低优先级OS_LOWEST_PRIO,包括0和OS_LOWEST_PRIO在内, uc/os总是在已经就绪的任务中选择一个任务来运行,为了了解那些任务出于就绪状态,uc/os在系统初始化的时候创建了一个供就绪任务登记的表,即就绪任务表。就绪任务表实际上为一个类型为INT8U的数组OSRdyTbl[],由 于每个任务在此数组中只占一位,所以数组的每一个元素可以表达8个任务的就绪状态。为了便于对就绪表的查找,uc/os又定义了一个数组类型为INT8的 OSRdyGrp,并使该数组的每一位都对应OSRdyTbl[]的一个任务组。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。例如OSRdyGrp=1100101,哪么意味着OSRdyTbl[0],OSRdyTbl[2],OSRdyTbl[6],OSRdyTbl[7]任务组中有任务就绪。

       由于优先级是一个单字节的数字,且其最大值不超过63,因此可以把优先级看做是一个6位的二进制数,这样子可以用高三位表示OSRdyGrp的具体数据位,用低三位表示数组元素OSRdyTcl的具体数据位。

     对于任务就绪表的操作主要有两项:添加,删除。

在任务就绪表中登记就绪任务的代码为:

OSRdyGrp |= OSMapTbl[prio >> 3];

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

从任务就绪表中删除任务的代码为:

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

OSRdyGrp &= ~OSMapTbl[prio >> 3];

T3.1 OSMapTbl[]的值

Index

Bit Mask (Binary)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值