Lite OS查找高优先级的代码

g_stLosTask.pstNewTask = LOS_DL_LIST_ENTRY(osPriqueueTop(), LOS_TASK_CB, stPendList); /*lint !e413*/

LITE_OS_SEC_TEXT LOS_DL_LIST *osPriqueueTop(VOID)
{
    UINT32 uwPri = 0;
 
 /* 优先级从高到低,从这里知道0对应的优先级最高 */
    for (uwPri = 0; uwPri < OS_PRIORITY_QUEUE_PRIORITYNUM; ++uwPri)
    {
     /*  判断当前的链表中有没有任务,从0开始判断,就是从最高优先级开始判断
   if(pstNode->pstNext == pstNode)  说明双向链表是空的
   !LOS_ListEmpty 说明如果不是空的。
   不是空的就说明for循环找到了最大的优先级链表了
     */
        if (!LOS_ListEmpty(&g_pstLosPriorityQueueList[uwPri]))
        {
            return LOS_DL_LIST_FIRST(&g_pstLosPriorityQueueList[uwPri]);
        }
    }
    return (LOS_DL_LIST *)NULL;
}
 
通过宏函数,得到的只是最高优先级PCB的首地址
邮箱:422705581@qq.com
原文地址:https://www.cnblogs.com/yangdh/p/13892264.html