一、启动和初始化ucosiii
1、调用OSInit()初始化ucos
2、创建任务,一般只在main()中创建一个start_task()任务,其他任务都在start_task()中创建。
调用OSTaskCreate()创建任务时一定要调用OS_CRITICAL_ENABLE()进入临界区,任务创建完成后调用OS_CRITICAL_EXIT()推出临界区。
3、OSStart()开启ucosiii。
注:ucosii的OSTaskCreate()一般有四个或九个参数。
二、任务管理
1、任务状态
2、任务控制块
在使用OSTaskCreate()函数来创建人物的时候就会给任务分配一个任务控制块OS_TCB。
3、任务堆栈
任务堆栈用来切换任务和调用其它函数的时候保存现场,每个任务应该具有自己的堆栈。
堆栈定义如下,CPU变量为4个字节,所以定义的任务堆栈TASK_STK,堆栈大小为64*4=256。
4、任务就绪表
优先级位映射表OSPrioTB1[]和就绪任务列表OSRdyList[]。
5、任务调度和切换
5.1 可剥夺型调度
5.1.1任务级调度器OSSched()
在os_core.c文件。在中断服务函数中不能使用。
5.1.2中断级调度器OSInitExit()
在调用OSInitExit(),中断应该关闭。
5.2 时间片轮转调度
ucos中允许一个任务运行一段时间(时间片)后出CPU的使用权,让拥有同优先级的下一任务运行。