任务控制块taskControlBLock结构体,
以下为部分
typedef struct tskTaskControlBlock
{
volatile StackType_t * pxTopOfStack; //栈顶指针
ListItem_t xStateListItem; //任务状态表项
ListItem_t xEventListItem; //事件表项
UBaseType_t uxPriority; //优先级
StackType_t * pxStack; //堆栈指针
char pcTaskName[ configMAX_TASK_NAME_LEN ]; //任务名
#if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )
StackType_t * pxEndOfStack; //栈底指针
#endif
#if ( portCRITICAL_NESTING_IN_TCB == 1 )
UBaseType_t uxCriticalNesting; //嵌套层数
#endif
...
} tskTCB;
任务四种状态,运行,就绪,阻塞,挂起
当前运行任务
portDONT_DISCARD PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL;
就绪态,链表数组,每个优级级对应一个链表,据优先级调用。
PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];
延时链表
PRIVILEGED_DATA static List_t xDelayedTaskList1;
PRIVILEGED_DATA static List_t xDelayedTaskList2;
以下两个链表指针各指向一个延时链表,时间tick溢出交换一次位置。
PRIVILEGED_DATA static List_t * volatile pxDelayedTaskList;
PRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList;
挂起状态链表
#if ( INCLUDE_vTaskSuspend == 1 )
PRIVILEGED_DATA static List_t xSuspendedTaskList;
#endif
解除挂起,待就绪链表。
PRIVILEGED_DATA static List_t xPendingReadyList;