uCOS获取任务就绪表最高优先级,OSUnMapTal的原理和应用。

先解释几个变量:

OSRdyTbl []:任务就绪表。INT8U类型的数组,所有的优先级都保存在这个表中。

OSRdyGrp:INT8U类型的变量,辅助变量,用来表示任务就绪表的哪一组中有(一或多个)就绪的任务。

OSUnMapTal []:用来得出最高优先级的数组,每个下标都对应与之相等的INT8U数的最高优先位。


为了获取优先级别最高的就绪任务,我们不采取运算量大的遍历方式,而是采取通过 就绪组变量OSRdyGrp 和 就绪表OSRdyTbl[y] 导入到某表,得出优先位的方式快速获取。

原理:

既然0000,0010的最优先位是1;0010,0000的最优先位是5。那么就可以总结出优先位的数组,直接通过八位数就能得到优先位。

从0000,0000开始,到1111,1111结束,一共256种情况将全部优先位按顺序列出。那么将0001,1010当作下标代入此表,得出的优先位就是1(从右往左数第二个)。

这个数组就是OSUnMapTal。数组的每一位都对应与此下标相等的INT8U类型数的最高优先位


使用方法:

先将OSRdyGrp当作下标——OSUnMapTal[OSRdyGrp],得出最高就绪表中最高优先级所在的组数y

将OSRdyTbl[y]当作下标——OSUnMapTal[OSRdyTbl[y]],得出最高优先组中的最高优先列x

将y左移位,与x相加,就得到了最高优先级:

prio=(y<<3)+x.

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值