uc/os优先级判定表分析

 

最近学习嵌入式操作系统,发现它的优先级表示和判别方式跟我之前看到的执行框架优先级判别方法是一样的,应该是借鉴ucos的。

之前没仔细分析过,现在看了一遍写点心得。以优先级64个为例说明。

首先是优先级分组,8个任务是一组,共分为8组 , 用 OSRdyGrp变量表示,哪一位置1,表示哪一组有任务就绪 。

每一小组的 用 OSRdyTbl[] 数组的成员表示, 数组中的成员变量中的哪一位置1,表示这一小组的任务哪一个任务就绪。

这个表示法最重要的是从变量的最低位表示0,寻找最高优先级总是从最低位开始查询,这就是最重要的原理。

比如 有三个任务同时运行 ,分别是 25 ,27 ,37 

首先是分组   25= 3*8+1   ,27 =3*8+3 ,37=4*8+5 ;

第3组中有两个任务(组内位1和3),第4组有一个任务(组内位5)。

OSRdyGrp=00011000  ,第3、4位置1

OSRdyTbl[3]= 00001010,第1,3位置1

OSRdyTbl[4]= 00100000,第5位置1

就是根据这个优先级分组原理,把组的位,和组内的位,有任务就绪 ,这个两个变量相应的位置1就行。

程序中具体实现:

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

 

就绪表这一步就完成了,

下一步是判断优先级,

判断优先级,就是从3个任务里,判断哪一个任务是最高优先级,咱这个举例中是25 那个优先级最高,嵌入式系统中要求判断的时间不管就绪表里有多少任务,时间要是确定的,3个任务就绪,跟13个任务就绪判断出最高优先级时间是一样的。

就有了一个,OSUnMapTbl[256]  数组,这个表怎么来的呢。

 

分析:如果让我们判断这个3个任务里,那个优先级高,首先要判断 这个组变量OSRdyGrp  ,首先要找到最低位是1的是第几位(看上面红色字体解释),很显然是第三组优先级最高。

这个OSUnMapTbl[256]  ,就是把OSRdyGrp的值 当数组下标,把OSRdyGrp 的二进制最低位是1 的位数 当做 数组值 得来的。

举例

OSRdyGrp=00011000  ,第3、4位置1  ,这个值是24,最低位是1的是第3位。

OSUnMapTbl[24] ,这个数组中的第24成员(从0开始算)就是3,可以看出表中24对应的数值是3  ,这个表就是这么得来的,提前把最低位是1的位数算出来。

先算组变量,找到第3组,第4组根本不必算了,再算组内变量优先级,,原理是一样的,也是最低位优先级最高。

找到 OSRdyTbl[3]= 00001010,第1,3位置1 ,这个值是10 ,最低位是1是第1位  ,可以看出表中第10中对应数值是1。

优先级最高的就是  = OSUnMapTbl[24]*8 + OSUnMapTbl[10]]  = 3*8+1  =25   

程序实现:

#if OS_LOWEST_PRIO <= 63u                        /* See if we support up to 64 tasks                   */
    INT8U   y;


    y             = OSUnMapTbl[OSRdyGrp];
    OSPrioHighRdy = (INT8U)((y << 3u) + OSUnMapTbl[OSRdyTbl[y]]);

 

就用这个两行程序判断,时间一定。

总结就是优先级分组 ,然后是最低位优先级最高,这两个最基本的原理。。

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uc/os是一种嵌入式实时操作系统(RTOS),广泛应用于各种嵌入式系统中。uc/os提供了一个轻量级的操作系统内核,可以高效地管理硬件资源,实现实时任务的调度和运行。uc/os的设计目标是高性能、低成本和可裁剪性。 uc/os的主要特点之一是可裁剪性,用户可以根据系统需求选择需要的功能,从而使系统更精简、更高效。uc/os提供了丰富的功能模块,如任务管理、事件管理、内存管理、中断管理等,用户可以根据需求选择性地使用这些功能。此外,uc/os还提供了一套完整的API接口,方便用户进行开发和调试。 uc/os的另一个特点是实时性。uc/os采用了优先级抢占式调度算法,可以满足实时任务对响应时间的要求。任务可以根据其优先级进行动态的抢占,从而保证最高优先级任务的及时执行。同时,uc/os还提供了一些实时通信机制,如消息队列和信号量等,方便任务之间的数据交换和同步。 此外,uc/os还具有灵活的内存管理机制。uc/os可以根据任务的需要,动态分配和释放内存资源。这可以有效地管理系统的内存使用,提高系统的效率和可靠性。 总结起来,uc/os是一种高性能、低成本、可裁剪的嵌入式实时操作系统。它的设计目标是满足实时任务的调度和运行需求。uc/os提供了丰富的功能模块和API接口,方便用户进行开发和调试。同时,uc/os还具有灵活的内存管理机制和实时通信机制,提高系统的效率和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值