多任务操作系统最主要的就是对任务的管理,包括任务的创建、挂起、删除和调度等。UCOSIII任务管理主要包括下面几个部分:
1.UCOSIII启动和初始化
2.任务状态
3.任务控制块
4.任务堆栈
5.任务就绪表
6.任务调度和切换
UCOSIII启动和初始化
在使用UCOSIII的时候要按照一定的顺序初始化并打开UCOSIII:
·调用CPU_Init()初始化UCOSIII
·创建任务,一般我们在main()函数中只创建一个start_task任务,其他任务都在start_task创建,在调用OSTaskCreate()函数创建任务的时候一定要调用OS_CRITICAL_ENTER()函数进入临界区,任务创建完成后调用OS_CRITICAL_EXIT()函数退出临界区。
·最后调用OSStart()函数开启UCOSIII
注意:我们在调用OSStart()开启UCOSIII之前一定要至少创建一个任务,其实我们在调用OSInit()函数初始化UCOSIII的时候已经创建了一个空闲任务。
UCOSIII的任务状态
UCOSIII支持的是单核CPU,不支持多核CPU,这样在某一时刻只有一个任务会获得CPU使用权进入运行态,其他的任务就会进去其他状态,UCOSIII中的任务有多个状态。在UCOSIII中任务可以再这个5个状态中转换。
休眠态:休眠态就是任务以任务函数的方式存在,只是储存区的一段代码,并未用OSTaskCreate()函数创建这个任务,不受UCOSIII管理的。
就绪态:任务在就绪表中已经登记,等待获取CPU使用权。
运行态:正在运行的任务就处于运行态。
等待态:正在运行的任务需要等待某一个事件,比如信号量、消息、事件标志组等,就会暂时让出CPU使用权进入等待时间状态。
中断服务态:一个正在执行的任务被中断打断,CPU转而执行中断服务程序,这是这个任务就会被挂起,进入中断服务态。
![UCOSIII任务状态转换图](https://img-blog.csdn.net/20160802133509511)
UCOSIII任务控制模块
我们使用OSTaskCreate()函数来创建任务的时候就会给任务分配一个任务控制块。任务控制块是一个结构体,这个结构体如下:
void OSTaskCreate (OS_TCB *p_tcb,
CPU_CHAR *p_name,
OS_TASK_PTR p_task,
void *p_arg,
OS_PRIO prio,
CPU_STK *p_stk_base,
CPU_STK_SIZE stk_limit,
CPU_STK_SIZE stk_size,
OS_MSG_QTY q_size,
OS_TICK time_q