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()
|