在 FreeRTOS 中,任務控制塊(Task Control Block,TCB)是用于管理和描述任務的核心數據結構。每個任務都有一個對應的 TCB,它包含了任務的所有相關信息。
TCB 的主要功能
- 存儲任務狀態信息:TCB 中包含了任務的優先級、任務名稱、任務棧的指針等信息。
- 任務上下文管理:TCB 中的
pxTopOfStack
指針指向任務棧頂,用于保存任務的上下文信息(如寄存器值)。 - 任務調度支持:TCB 中的
xStateListItem
和xEventListItem
用于任務在就緒列表、延遲列表或事件列表中的管理。
TCB 的結構
TCB 的結構體定義如下:
typedef struct tskTaskControlBlock
{volatile StackType_t *pxTopOfStack; // 棧頂指針#if ( portUSING_MPU_WRAPPERS == 1 )xMPU_SETTINGS xMPUSettings; // MPU 設置#endifListItem_t xStateListItem; // 任務狀態列表項ListItem_t xEventListItem; // 事件列表項UBaseType_t uxPriority; // 任務優先級StackType_t *pxStack; // 棧底指針char pcTaskName[configMAX_TASK_NAME_LEN]; // 任務名稱// 其他可選成員...
} TCB_t;
TCB 的使用場景
- 任務創建:在創建任務時,需要為任務分配一個 TCB,并初始化其成員。
TaskHandle_t TaskHandle; TCB_t TaskTCB; StackType_t TaskStack[TASK_STACK_SIZE]; TaskHandle = xTaskCreateStatic(TaskFunction, "TaskName", TASK_STACK_SIZE, NULL, TaskStack, &TaskTCB);
- 任務調度:調度器通過 TCB 來管理任務的執行狀態,包括就緒、阻塞、掛起等。
- 任務刪除:任務被刪除時,其對應的 TCB 會被標記為待清理。
TCB 是 FreeRTOS 中任務管理的基礎,通過它,調度器能夠高效地管理和切換任務。