就绪列表
就绪列表就是一个 List_t 类型的数组(List_t 就是链表头的数据类型),数组大小由 决定最大任务优先级的宏 configMAX_PRIORITIES 决定
目前在配置文件中默认定义为5。最大支持256个优先级,数组的下标就对应了任务的优先级,同一优先级的任务统一插入到就绪列表的同一条链表中
就绪列表定义:
List_t pxReadyTasksLists[configMAX_PRIORITIES];
就绪列表只有5个数
初始化任务相关的就绪列表
static void prvInitialiseTaskLists( void )
{
UBaseType_t uxPriority;
for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
{
//在列表项将到的根结点初始化,在这是依次遍历每一个每一个根结点
vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
}
vListInitialise( &xDelayedTaskList1 );
vListInitialise( &xDelayedTaskList2 );
vListInitialise( &xPendingReadyList );
#if ( INCLUDE_vTaskDelete == 1 )
{
vListInitialise( &xTasksWaitingTermination );
}
#endif /* INCLUDE_vTaskDelete */
#if ( INCLUDE_vTaskSuspend == 1 )
{
vListInitialise( &xSuspendedTaskList );
}
#endif /* INCLUDE_vTaskSuspend */
/* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
using list2. */
pxDelayedTaskList = &xDelayedTaskList1;
pxOverflowDelayedTaskList = &xDelayedTaskList2;
}
根据前面讲解的任务控制块可知:任务控制块里面内嵌了一个列表项,所以只需要将任务控制块中列表项结点插入到就绪列表(根结点)中