- 1.任务堆栈
#define START_STK_SIZE 512
CPU_STK START_TASK_STK[START_STK_SIZE]
任务堆栈定义为512,CPU_STK 为uint型[4个字节],故定义的堆栈数组 START_TASK_STK大小为512*4=2048字节。
- 2.任务堆栈初始化
- 任务如何才能切换回上一个任务并且还能接着从上次被中断的地方开始运行?恢复现场即可,现场就是CPU的内部各个寄存器。因此在创建一个新任务时,必须把系统启动这个任务时所需的CPU各个寄存器初始值事先存放在任务堆栈中。这样当任务获得CPU使用权时,就把任务堆栈的内容复制到CPU的各个寄存器,从而可以任务顺利地启动并运行。
任务堆栈初始化函数为OSTaskStkInit(),这个函数在任务创建函数OSTaskCreate()中调用。
- 3.创建任务堆栈
- 4.任务控制块
-OS_TCB StartTaskTCB
任务控制块初始化函数OS_TaskInitTCB(),这个函数在任务创建函数OSTaskCreate()中调用。
- 5.任务优先级
- 任务优先级数由宏OS_CFG_PRIO_MAX来定;
数值越小,优先级越高;
最低优先级为OS_CFG_PRIO_MAX-1;
该宏位于os_cfg.h里面,默认为64级;
- 6.任务就绪表
- 1、优先级位映射表OSPrioTbl[](int定义):用来记录哪个优先级下有任务就绪。
2、就绪任务列表OSRdyList[](结构体定义):用来记录每一个优先级下所有就绪的任务。
此图默认优先级为64个: