UCOSII操作系统2–UCOSII的内核实现
参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》
1、任务的结构–任务控制块
首先这个任务控制块是非常的大的,这里面使用很多的宏定义,估计是可以让使用者使用的时候按需配置。
(1)任务的关键 OS_STK == 任务的堆栈,用于保存任务的信息,最主要的是保存在程序的运行的SP指针。
任务切换的实质就是SP指针的变化,通过SP指针的变化,可以跳转到你想要去的任何的一块不受保护的地址去。
(2)任务的链表: struct os_tcb *OSTCBNext; 指向下一个任务,
此处使用链表是可以通过指针访问下一个任务的内容,可以使用这个双向链表放置到某些队列当中,实现同优先级的多任务。
(3)事件控制块:OS_EVENT *OSTCBEventPtr;
是一个技术组件,用于后面的消息和消息队列,邮箱和信号量等的设计。
typedef struct os_tcb {
OS_STK *OSTCBStkPtr; /* 指向当前任务堆栈栈顶的指针 */
#if OS_TASK_CREATE_EXT_EN > 0
void *OSTCBExtPtr; /* 指向用户定义的任务控制块扩展,这个数据结构包括了任务的名字 */
OS_STK *OSTCBStkBottom; /* 以跟踪某个任务的执行时间,或者跟踪到某个任务的次 */
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