嵌入式学习小组
直播中

贵奂

7年用户 211经验值
私信 关注

UCOSIII就绪任务列表的优先级问题

void  OS_RdyListinsert (OS_TCB  *p_tcb),里面为啥要根据任务的优先级是否是当前优先级,如果是当前优先级就尾插到就绪任务列表,如果不是就头插。我想问WHY?另外吐槽我粘贴代码过来是C格式不是不行?
void  OS_RdyListInsert (OS_TCB  *p_tcb)
{
    OS_PrioInsert(p_tcb->Prio);
    if (p_tcb->Prio == OSPrioCur) {                         /* Are we readying a task at the same prio?               */
        OS_RdyListInsertTail(p_tcb);                        /* Yes, insert readied task at the end of the list        */
    } else {
        OS_RdyListInsertHead(p_tcb);                        /* No,  insert readied task at the beginning of the list  */
    }
#if (defined(TRACE_CFG_EN) && (TRACE_CFG_EN > 0u))
        TRACE_OS_TASK_READY(p_tcb);                         /* Record the event.                                      */
#endif
}

回帖(5)

李小红

2020-3-19 09:35:51
我觉得这样可能是因为运行的永远是最新就绪的任务。
举报

洪禹

2020-3-19 09:49:23
帮顶
举报

韦明

2020-3-19 10:07:08
首先如果是当前优先级的话,也就是ucosiii允许了时间片轮转调度,所以插入就绪标表的尾端。ucosiii在做任务切换的时候总是切换到该优先级下的就绪表的第一个任务。当不是同一个优先级的时候,不确定该优先级是否有任务就绪,所以直接插入到头部。
举报

姜雨孜

2020-3-19 10:28:33
所以我的问题还是为啥不都搞成尾插,新加个任务排在该优先级就绪任务链表最前面,不知道为啥这么干?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分