ucos 最高任务优先级 OS_SchedNew () 最高256个优先级 源码分析

ucos任务最高支持256个,但是大部分的只是说64个,所以现在给出256的分析,与64的一样,只是8*8变为16*16

OSRdyGrp和OSRdyTbl是16位的

static  void  OS_SchedNew (void)

{

#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]]);

#else                                            /* We support up to 256 tasks                         */

    INT8U     y;

    OS_PRIO  *ptbl;

    //这是优先级超过64时,计算任务最高优先级方法

    //OSRdyGrp为16位,y值越小,它的优先级越高,所以如果低8位有了需要调度的程序,那么没有必要再去考虑        高8位情况  

    if ((OSRdyGrp & 0xFFu) != 0u) {

        y = OSUnMapTbl[OSRdyGrp & 0xFFu];

    } else {

    //高8位  8*16部分

        y = OSUnMapTbl[(OS_PRIO)(OSRdyGrp >> 8u) & 0xFFu] + 8u;

    }

    ptbl = &OSRdyTbl[y];

    if ((*ptbl & 0xFFu) != 0u) {

        OSPrioHighRdy = (INT8U)((y << 4u) + OSUnMapTbl[(*ptbl & 0xFFu)]);  //16所以需要左移4位

    } else {

        OSPrioHighRdy = (INT8U)((y << 4u) + OSUnMapTbl[(OS_PRIO)(*ptbl >> 8u) & 0xFFu] + 8u);

    }

#endif

}

181434_Id2u_274829.jpg

这是OSRdyGrp和OSRdyTbl为8位时的图片,256时就便X、Y为4位,OSRdyGrp和OSRdyTbl为16位

转载于:https://my.oschina.net/u/274829/blog/263287

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值