ucOS-ii 与 iii的比较

【1】就绪表的最高优先级位置不同,

在UCOS-ii 就绪表中最高优先级的位置在右边,

        ptcb->OSTCBY             = (INT8U)(prio >> 3);          /* Pre-compute X, Y, BitX and BitY     */
        ptcb->OSTCBX             = (INT8U)(prio & 0x07);
        ptcb->OSTCBBitY          = (INT8U)(1 << ptcb->OSTCBY);
        ptcb->OSTCBBitX          = (INT8U)(1 << ptcb->OSTCBX);

在UCOS-iii 就绪表中的最高优先级在左边。

    {
    CPU_DATA  bit;
    CPU_DATA  bit_nbr;
    OS_PRIO   ix;

    ix             = prio / DEF_INT_CPU_NBR_BITS;
    bit_nbr        = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u);
    bit            = 1u;
    bit          <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;

    OSPrioTbl[ix] |= bit;

}

【2】任务调度时,查的表顺序不同

在UCOS-ii 中OSSched( )会先查OSRdyTbl[ ]确定那个就绪任务的优先级最高,并取得其优先级。然后利用得到的优先级查表OSTCBPrioTbl[ ]确定该优先级任务的TCB结构体的地址。得到TCB结构体后就得到了接下来将执行的代码。



在UCOS-iii 中OSSChed( )会先查看OSPrioTbl[ ]得到最高就绪任务的优先级。然后利用得到的优先级prio,找到OSRdyList[prio]对应的优先级下任务就绪任务链表,然后HeadPtr指向链表的第一个TCB结构体。




猜你喜欢

转载自blog.csdn.net/register_k/article/details/80002332
今日推荐