UCOSII的任务控制块还是比较简单的,
任务控制块中有下面这些东西
堆栈指针;//用来存储任务切换时用于寄存器的值保存的内存的空间
下一个控制块指针;//这两个指针其是为了形成空闲任务控制块链表,和已在使用的控制块链表,
上一个控制块指针;//可以看出这是一个双向链表,暂时还不知道为什么弄双向的.
事件控制块指针;//信号量,消息邮箱,消息队列,互斥信号量都是用这个东西来描述的,只不过
//里面事件类型不同,用到的几个成员变量也不容而以.下面会介绍到信号量集
//这个就不适用事件控制块来描述.
消息指针;//用来指定当接收到得消息邮箱和消息队列的事件指针
标志组;//现在看来,其实是为了实现信号量集而添加的,因为时间控制块不能表示一组信号量了,所以用
//一个新的数据结构来表示
等待时间;//这个就是任务还剩多少时间才可运行,当调用OSTimeDly或者OSTimeDlyHMSM后
//这个变量开始起作用,没发生一次时钟中断,计数就减1,一直减到0,
任务状态;//任务的状态:睡眠,就绪,运行,等待,中断服务这几个状态中的一个
任务的优先级;//任务的优先级,即用来表示任务的优先运行的级别,又用来表示本任务的任务控制块指针
//在任务控制块数组中的下标
OSTCBX OSTCBY OSTCBBitX OSTCBBitY ;;;;这四个数据用来快速的在任务就绪表登记或注销自己
删除自己的标识;//如果任务删除自己,则给该标志置位.
typedef struct os_tcb {
OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
#if OS_TASK_CREATE_EXT_EN > 0
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_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)
OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */
#endif
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
#if OS_TASK_DEL_EN > 0
OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node */
#endif
OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run */
#endif
INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
INT8U OSTCBStat; /* Task status */
INT8U OSTCBPrio; /* Task priority (0 == highest, 63 == lowest) */
INT8U OSTCBX; /* Bit position in group corresponding to task priority (0..7) */
INT8U OSTCBY; /* Index into ready table corresponding to task priority */
INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */
INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */
#if OS_TASK_DEL_EN > 0
BOOLEAN OSTCBDelReq; /* Indicates whether a task needs to delete itself */
#endif
} OS_TCB