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]);
}
}
{
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的首地址