任务控制块
任务控制块是一个基于链表的数据结构,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。
任务的识别
对于RTOS来说,为每一个任务分配一个称为任务控制块的结构体变量来管理任务,即使用指向任务控制块结构体变量的指针来识别任务。
任务控制块是多任务操作系统的核心数据,如果操作错误,可能导致系统崩溃。所以这个指针不应当提供给用户程序。
任务控制块的结构体数组
struct tn_os_tcb{
jmp_buf jbTaskContext; //用于存储上下文信息
unsigned char ucTaskStat; //任务状态字
};
typedef struct tn_os_tcb TN_OS_TCB; //TN_OS_TCB类型等效struct tn_os_tcb
static data TN_OS_TCB __GtcbTasks[TN_OS_MAX_TASKS]; //任务控制块的结构体数组
为一个任务控制块的结构体数组,首先声明了一个struct tn_os_tcb类型,它代表任务控制块,包括2个成员:不同数据类型的jbTaskContext 上下文信息与uc-TaskStat任务状态字。将TN_OS_TCB定义为struct tn_os_tcb类型的变量,接着定义数组__GtcbTasks,其元素为TN_OS_TCB类型数据,数组有TN_OS_MAX_TASKS个元素。
OS初始化
static data TN_OS_TASK_HANDLE __GthTaskCur; //当前任务句柄
void tnOsInit(void) //初始化任务控制块
{
TN_OS_TASK_HANDLE thTask; //操作的任务
for (thTask=0;thTask<TN_OS_MAX_TASKS;thTask++){
__GtcbTasks[LthTask].ucTaskStat=__TN_TASK_FLG_DEL;