#if OS_TASK_PROFILE_EN > 0
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_SIZE > 1
INT8U
OSTCBTaskName[OS_TASK_NAME_SIZE];
#endif
} OS_TCB;
任务控制块贯穿了整个 uCOS2 操作系统,如果不了解
这个结构体在操作系统当中的用法,那就不可能 对
uCOS2 深入的理解。
在 Ucos_ii.h 当中有一个
OS_EXT OS_TCB
OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /*
Table of TCBs */
它是定义一个或者外部声明一个 OSTCBTbl 的数组
。
这两个作用需要靠 OS_GLOBALS 是否宏定义来选择 。 当
然在整个程序代码当中可能只有一个 C 文件中定义 了
OSTCBTbl 变量,其他的 C 文件中只是对它进行外部变
量声明。
在 Linux 操作系统编写增加链表和删除链表程序
时 , 都会伴随着内存空间的申请和释放 。 但是在 uCOS 2
操作系统当中没有这么强悍的内存管理。一个任务控
制块 OS_TCB 管理者一个任务,所以 OSTCBTbl 的元素
个数必须大于在应用程序当中建立的任务数。从定义
中可以看出元素个数由两个宏定义决定,第 一
OS_MAX_TASKS :就是在应用程序当中可能建立的最大
任务数,第二 OS_N_SYS_TASKS :是调用系统函数后有
系统建立的任务数。这两个数值是可以改变的,因为
在程序当中必须要有一个空闲任务,而计算 CPU 效率