在 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 中任务管理的基础,通过它,调度器能够高效地管理和切换任务。