1. uCOS-II任务管理机制概述
在嵌入式实时操作系统uCOS-II中,任务控制块(Task Control Block,简称TCB)是整个任务调度系统的核心数据结构。每个任务都对应一个TCB,它保存了任务执行所需的全部上下文信息,包括但不限于:
- 任务堆栈指针(SP)
- 任务优先级(Prio)
- 任务状态(就绪、挂起、延时等)
- 任务等待的事件或信号量
- 任务堆栈大小和位置信息
uCOS-II通过两个关键链表来管理所有任务的TCB:
-
就绪表(Ready List):一个按优先级排序的位图(OSRdyGrp和OSRdyTbl)和TCB指针数组(OSTCBPrioTbl)的组合结构,用于快速查找当前最高优先级的就绪任务。
-
空链表(Free List):一个单向链表,链接所有未被使用的空闲TCB结构,当创建新任务时从这里分配TCB资源。
1.1 TCB的双向链表结构
每个TCB包含两个重要的链表指针:
c复制struct os_tcb {
OS_TCB *OSTCBNext; /* 指向链表中的下一个TCB */
OS_TCB *OSTCBPrev; /* 指向链表中的上一个TCB */
/* 其他TCB成员... */
};
这种双向链表设计使得任务可以高效地插入和移除各种链表(如延时链表、事件等待链表等)。值得注意的是,就绪表实际上采用的是位图+数组的混合结构而非传统链表,而空链表则是标准的单向链表结构。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OS_TCBInit函数深度解析
OS_TCBInit是uCOS-II中负责初始化TCB结构的核心函数,其原型通常如下:
c复制static OS_TCB *OS_TCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt);
2.1 函数参数详解
让我们先拆解这个函数的各个参数:
- prio:任务的优先级,uCOS-II中优先级数值越小表示优先级越高。
- ptos:任务堆栈的栈顶指针(Top of Stack)。
3
