UCOSⅢ简介
- 简述
- 一、裸机系统与多任务系统
- 二、UCOSⅢ的重要特性
- 三、UCOSⅢ的组成
简述
UCOSⅢ(UCOS的第三代内核)是一个可裁剪、可固化、可剥夺的多任务系统,具有高度可移植性,没有任务数目的限制,特别适合微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。
随着产品要实现的功能越来越多,单纯的裸机系统以及不能完美的解决问题(响应速度、程序架构条理性等等),反而会使编程变得更加复杂,所以使用一个高效的系统是必然的。
除了UCOSⅢ,FreeRTOS操作系统也得到广泛的应用,因为其是开源免费的,非常适合用来做产品。不过,UCOSⅢ是商业化最成功、安全验证最多、资料最多的RTOS,所以学习首选UCOSⅢ。
一、裸机系统与多任务系统
先简要了解区分下裸机系统与多任务系统。
系统 | 特点 |
---|---|
轮询系统(裸机) | 先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。 |
前后台系统(裸机) | 前后台系统是在轮询系统地基础上加入了中断。外部事件地响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里称为前台,main函数里面的无限循环称为后台。 |
多任务系统(UCOS等) | 相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的任务的优先级足够高,就会立马得到响应。相比前后台系统,多任务系统的实时性又被提高了。 |
二、UCOSⅢ的重要特性
先简单阅读下,之后在UCOS后面的学习中再深化熟悉。
可剥夺多任务管理:总是执行当前就绪的最高优先级任务。
同优先级任务的时间片轮转调度:这个是UCOSⅢ和UCOSⅡ一个比较大的区别,UCOSⅢ允许一个任务优先级被多个任务使用,当这个任务级处于最高就绪态的时候,UCOSⅢ就会轮流调度处于这个优先级的所有任务,让每个任务运行一段由用户指定的时间长度,叫做时间片。
极短的关中断时间:UCOSⅢ可以采用锁定内核调度的方式而不是关中断的方式来保护临界代码,这样就可以将关中断的时间降到最低,使得UCOSⅢ能够非常快速的响应中断请求。
任务数目不受限制:UCOSⅢ本身是没有任务数目限制的,但是从实际应用角度考虑,任务数目会受到cpu所使用的存储空间的限制,包括代码空间和数据空间。
优先级数量不受限制:UCOSⅢ支持无限多的任务优先级。
内核对象数目不受限制:UCOSⅢ允许定义任意数目的内核对象。内核对象指任务、信号量、互斥信号量、事件标志组、消息队列、定时器和存储块等。
软件定时器:用户可以任意定义“单次”和“周期”型定时器,定时器是一个递减计数器,递减到零就会执行预先定义好的操作。每个定时器都可以指定所需操作,周期型定时器在递减到零时会执行指定操作,并自动重置计数器值。
同时等待多个内核对象:UCOSⅢ允许一个任务同时等待多个事件,也就是说,一个任务能够挂起在多个信号量或者消息队列上,当其中任何一个对待的事件发生时,等待任务就会被唤醒。
直接向任务发送信号:UCOSⅢ允许中断或任务直接给另一个任务发送信号,避免创建和使用诸如信号量和事件标志等内核对象作为向其他任务发送信号的中介,该特性有效的提高了系统性能。
直接向任务发送消息:UCOSⅢ允许中断或者任务直接给另一个任务发送消息,避免创建和使用消息队列作为中介。
任务寄存器:每个任务都可以设定若干个“任务寄存器”,任务寄存器和CPU硬件寄存器时不同的,主要用来保存各个任务的错误信息,ID识别信息,中断关闭时间的测量结果等。
任务级时钟节拍处理:UCOSⅢ的时钟节拍是通过一个专门任务完成的,定时中断仅触发该任务。将延迟处理和超时判断放在任务级代码完成,能极大的减少中断延迟时间。
防止死锁:所有UCOSⅢ的“等待”功能都提供了超时检测机制,有效的避免了死锁。
时间戳:UCOSⅢ需要一个16位或者32位的自由运行计数器(时基计数器)来实现时间测量,在系统运行时,可以通过读取该计数器来测量某一个事件的时间信息。例如,当ISR给任务发送消息时,会自动读取该计数器的数值并附在消息中,当任务读取消息时,可得到该消息携带的时标,这样,再通过读取当前的时标,并计算两个时标的差值,就可以确定传递这条消息所花费的确切时间。
UCOS两个版本的特性列表
三、UCOSⅢ的组成
UCOSⅢ的组成可以大致分成核心、任务处理、时间处理、任务同步与通信、CPU的移植等5个部分。
1)核心部分(OSCore.c)
是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能维持系统基本工作的部分都再这里。
2)任务处理部分(OSTask.c)
任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为UCOSⅢ是以任务为基本单位调度的,所以这部分内容也相当重要。
3)时钟部分(OSTime.c)
UCOSⅢ中最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。
4)任务同步和通信部分
为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的相互联系和对临界资源的访问。
5)与CPU的接口部分
是指UCOSⅢ针对所使用的CPU的移植部分。由于UCOSⅢ是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据CPU具体内容和要求作相应的移植。这部分由于牵涉到SP等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。
本文参考:正点原子、野火、百度百科