本文主要是介绍os_tcb,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
struct os_tcb {
CPU_STK *StkPtr; /* 指针变量指向当前任务栈的栈顶*/
void *ExtPtr; /* 指针变量指向任务可定义的扩展区*/
CPU_STK *StkLimitPtr; /* 指针变量指向任务栈的栈深度位置*/
OS_TCB *NextPtr; /* 任务就绪表中的下一个任务控制块*/
OS_TCB *PrevPtr; /* 任务就绪表中的上一个任务控制块*/
OS_TCB *TickNextPtr; /* 正在延时后等待某个事件任务的下一个任务控制块*/
OS_TCB *TickPrevPtr; /* 正在延时后等待某个事件任务的上一个任务控制块*/
OS_TICK_SPOKE *TickSpokePtr; /* 通过该指针可以知道该任务挂在时钟节拍列表的哪个位置*/
CPU_CHAR *NamePtr; /* 给任务起名字(ASCII字符串)*/
CPU_STK *StkBasePtr; /* 任务栈的基地址*/
OS_TASK_PTR TaskEntryAddr; /* 任务函数的入口地址*/
void *TaskEntryArg; /* 任务函数的入口参数*/
OS_PEND_DATA *PendDataTblPtr; /* μC/OS允许任务挂起在任意数目的信号量或消息队列上,该指针指向任务挂起表*/
OS_STATE PendOn; /* 表示任务等待的事件类型/
OS_STATUS PendStatus; /* 表示任务等待的状态 */
OS_STATE TaskState; /* 任务当当前状态(内部状态机的8个状态之一)*/
OS_PRIO Prio; /* 任务的优先级*/
CPU_STK_SIZE StkSize; /* 任务栈的大小*/
OS_OPT Opt; /* 任务创建时的选项*/
OS_OBJ_QTY PendDataTblEntries; /* 表示同时等待的事件对象的述目与PendDataTblPtr配合使用*/
CPU_TS TS; /* 时间戳*/
OS_SEM_CTR SemCtr; /* 任务内建的计数型信号量的计数值*/
/* DELAY / TIMEOUT */
OS_TICK TickCtrPrev; /* 任务开始延时时的时钟值*/
OS_TICK TickCtrMatch; /* 任务开始延时时的时钟值与延时时间的总和,用来确定是否延时结束*/
OS_TICK TickRemain; /* 剩余延时时间*/
/* ... run-time by OS_StatTask() */
OS_TICK TimeQuanta; /*时间片轮转调度时,给任务分配的时间片(时钟节拍数)*/
OS_TICK TimeQuantaCtr; /*当前任务的时间片剩余值*/
void *MsgPtr; /* 当任务接收消息时,该指针指向消息*/
OS_MSG_SIZE MsgSize; /*表示接收消息的长度*/
OS_MSG_Q MsgQ; /* 任务内建消息队列*/
CPU_TS MsgQPendTime; /* 记录一条消息到达所花费的时间*/
CPU_TS MsgQPendTimeMax; /* 记录一条消息到达所花费的最长时间*/
OS_REG RegTbl[OS_CFG_TASK_REG_TBL_SIZE]; /* 每个任务的专用寄存器不同于CPU寄存器,用来存储任务专用的消息,
例如:任务ID、errno信息,还可以存储在系统运行时与任务相关联的数据,数据类型必须为OS_REG */
OS_FLAGS FlagsPend; /*等待事件组标志位*/
OS_FLAGS FlagsRdy; /* 等待事件组标志位中的就绪位*/
OS_OPT FlagsOpt; /* 等待的类型*/
OS_NESTING_CTR SuspendCtr; /* 记录任务挂起的次数*/
OS_CPU_USAGE CPUUsage; /* 统计任务记录的任务CPU利用率(0.00-100.00%)*/
OS_CPU_USAGE CPUUsageMax; /* CPU Usage of task (0.00-100.00%) - Peak*/
OS_CTX_SW_CTR CtxSwCtr; /* 任务执行的频繁程度(每次调用就递增)*/
CPU_TS CyclesDelta; /* 此次执行任务所花费的时间,切换时计算value of OS_TS_GET()-.CyclesStart*/
CPU_TS CyclesStart; /*任务切换时,记录的当前任务运行开始的时间*/
OS_CYCLES CyclesTotal; /* 任务运行的总时间sum of CyclesDelta*/
OS_CYCLES CyclesTotalPrev; /* Snapshot of previous # of cycles */
CPU_TS SemPendTime; /* 信号量发送到接收所花费的时间OSTaskSemPost()开始计时,OSTaskSemPend()时返回*/
CPU_TS SemPendTimeMax; /* SemPendTime的最大值,即花费的最长时间*/
CPU_STK_SIZE StkUsed; /* 由OSTaskStkChk()统计的当前任务的堆栈使用字节数*/
CPU_STK_SIZE StkFree; /* 由OSTaskStkChk()统计的当前任务的堆栈未使用字节数*/
CPU_TS IntDisTimeMax; /* 最大中断关闭时间*/
CPU_TS SchedLockTimeMax; /* 锁定调度器的最长时间*/
OS_TCB *DbgPrevPtr; /* 指向OS_TCB双向链表中的前一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
OS_TCB *DbgNextPtr; /* 指向OS_TCB双向链表中的后一个OS_TCB,当创建任务时,相应的TCB被插入到双向链表中*/
CPU_CHAR *DbgNamePtr; /* 当任务在等待一个时间标志组、一个信号量、一个互斥信号量或一个消息队列时,该指针指向任务所等待对象的名字*/
};
这篇关于os_tcb的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!