1.TCB_T
TCB_t的全称为Task Control Block,也就是任务控制块。
typedef struct tskTaskControlBlock
{
//栈顶指针,中断或任务切换时,会对任务压栈
volatile StackType_t *pxTopOfStack;
// 启用MPU的情况下设置
#if ( portUSING_MPU_WRAPPERS == 1 )
/* 设置任务访问的内存权限 */
xMPU_SETTINGS xMPUSettings;
#endif
// 表示任务状态,不同的状态会挂接在不同的状态链表下
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
// 跟踪调试用的变量
#if ( configUSE_TRACE_FACILITY == 1 )
/* 用于调试,表示本任务是第几个创建,每创建一个任务,系统有一个全局变量加1*/
UBaseType_t uxTCBNumber;
/* 调试用,用户通过API函数vTaskSetTaskNumber()来设置,数值由函数参数指定 */
UBaseType_t uxTaskNumber;
#endif
/* 如果使用任务互斥量信号 */
#if ( configUSE_MUTEXES == 1 )
/* 优先级提升前,保存原优先级,优先级反转时用*/
UBaseType_t uxBasePriority;
/* 任务获取的互斥信号量个数,为0*/
UBaseType_t uxMutexesHeld;
#endif
// 任务的一个标签值,可以由用户自定义它的意义,例如可以传入一个函数指针可以用来做Hook 函数调用
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
TaskHookFunction_t pxTaskTag;
#endif
// 任务的线程本地存储指针,可以理解为这个任务私有的存储空间
#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )
void