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

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐