UCOSiii系统是一个可裁剪、可剥夺型的多任务内核,而且没有任务限制。UCOSiii提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
1.可剥夺型内核:
a) 内核:负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其它任务,这个是内核的多人物管理能力,多任务管理实现了CPU资料的最大化利用,多任务管理有利于实现程序的模块化开发,能够实现复杂的实时应用。
b)可剥夺内核顾名思义就是可以剥夺其它任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。
2.UCOSiii中任务组成有三部分
a)任务堆栈:上下文切换的时候用来保护任务当前环境,即压栈进行现场保护(是一个结构体数组)
//任务堆栈大小
#define START_STK_SIZE 128
//任务堆栈创建
CPU_STK START_TASK_STK[START_STK_SIZE];
b)任务控制块: 用来记录任务各个属性/与任务相关信息(是一个结构体)
//任务控制块创建
OS_TCB StartTaskTCB;
c)任务函数: 用户自己编写的处理函数。(是一个函数)
//开始任务函数创建
void App_start_task(void *p_arg)
{
while(1){
}
}
3.任务的5种状态
- 休眠: 任务已经在CPU的flash中了,但是还不受μCOSIII管理。
- 就绪: 系统为任务分配任务控制块,并且任务在就绪表中登记,已经具备运行条件,只要再获得CPU控制权,便可立即执行。
- 运行: 任务已经获得CPU使用权,正在运行。
- 等待: 正在运行的任务需要等待一段时间,或者等待某个事件,这个任务就进入了等待状态,此时系统会把CPU使用权转交给其他任务。
- 中断服务: 发生中断时,当前正在运行的任务就会被挂起,CPU转而去执行服务函数。
任务状态转换图如图:(此图来源正点原子)
4.用户程序不能使用的优先级
这些优先级都分配给了μCOSIII的5个系统任务
- 优先级0: 中断服务服务管理任务 OS_IntQTask()
- 优先级1: 时钟节拍任务 OS_TickTask()
- 优先级2: 定时任务 OS_TmrTask()
- 优先级OS_CFG_PRIO_MAX-2: 统计任务 OS_StatTask()
- 优先级OS_CFG_PRIO_MAX-1: 空闲任务 OS_IdleTask()