任务控制块是任务管理的核心数据结构,操作系统在启动的时候,首先要在内存中创建一定数量的任务控制块。任务控制块的数量等于操作系统中能同时管理的做多任务数。
源码:ucos-II 2.91
/*
*********************************************************************************************************
* 任务控制块
*********************************************************************************************************
*/
typedef struct os_tcb {
//typedef unsigned int OS_STK; ------>OS_CPU.H文件中定义
OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
#if OS_TASK_CREATE_EXT_EN > 0u
//如果OS_TASK_CREATE_EXT_EN > 0u,表示配置了任务创建扩展功能,以下几个定义语句才有效;
void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */
OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */
INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */
INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */
INT16U OSTCBId; /* Task ID (0..65535) */
#endif
struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */
struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */
#if (OS_EVENT_EN)
OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */
#endif
#if (OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0u)
OS_EVENT **OSTCBEventMultiPtr; /* Pointer to multiple event control blocks */
#endif
#if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u)
void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */
#endif
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
#if OS_TASK_DEL_EN > 0u
OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node */
#endif
OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run */
#endif
INT32U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
INT8U OSTCBStat; /* Task status */
INT8U OSTCBStatPend; /* Task PEND status */
INT8U OSTCBPrio; /* Task priority (0 == highest) */
INT8U OSTCBX; /* Bit position in group corresponding to task priority */
INT8U OSTCBY; /* Index into ready table corresponding to task priority */
OS_PRIO OSTCBBitX; /* Bit mask to access bit position in ready table */
OS_PRIO OSTCBBitY; /* Bit mask to access bit position in ready group */
#if OS_TASK_DEL_EN > 0u
INT8U OSTCBDelReq; /* Indicates whether a task needs to delete itself */
#endif
#if OS_TASK_PROFILE_EN > 0u
INT32U OSTCBCtxSwCtr; /* Number of time the task was switched in */
INT32U OSTCBCyclesTot; /* Total number of clock cycles the task has been running */
INT32U OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption */
OS_STK *OSTCBStkBase; /* Pointer to the beginning of the task stack */
INT32U OSTCBStkUsed; /* Number of bytes used from the stack */
#endif
#if OS_TASK_NAME_EN > 0u
INT8U *OSTCBTaskName;
#endif
#if OS_TASK_REG_TBL_SIZE > 0u
INT32U OSTCBRegTbl[OS_TASK_REG_TBL_SIZE];
#endif
} OS_TCB;
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
英特尔推出第二代酷睿系列处理器,搭载实时处理性能并扩充边缘 AI 产品矩阵
大连Moblin研讨会视频 II
IDF2010:解读个人电脑
EZ-USBFX2单片机CY7C68013的特性介绍
TDA2320功放电路
FM1702or1704or1075读非接触卡芯片(无水印版)
2009 “英特尔杯”全国计算机多核程序设计大赛2
CPU借AI热潮重获青睐,再度 “变酷”
TDA2611A功放电路
Emerson推出NI USRP X420软件定义无线电
EM78系列OTP型新一代8位单片机特点
南京行思科技提供有蓝牙,ARM等的开发平台哦
意法半导体Stellar P3E:车载边缘AI MCU 开启汽车多合一电控新时代
EMC 汇编语言指令集
TDA2822功放电路
南京行思科技有ARM开发平台哦
Gartner提出挖掘人工智能价值的三大核心支柱
IDF 2010 MeeGo展区QT介绍
2009 “英特尔杯”全国计算机多核程序设计大赛1
伊朗局势紧张,亚洲汽车供应链面临冲击
TDA2822M功放电路
IAR扩展嵌入式开发平台,推出面向安全关键型应用的长期支持(LTS)服务
请问如何用usb启动vxworks(目标机pcpenium)?
TDA2613功放电路
Groq向三星提出AI芯片扩产需求,推论芯片市场或迎爆发
SEALSQ推出量子系统PQC栈
Nordic扩展nRF54L系列,推出入门级低功耗蓝牙SoC
ep7312芯片原理及应用
南京行思有蓝牙,ARM等开发平台
南京行思科技有蓝牙,ARM等开发平台哦