uC/OSII 和 uC/OSIII 系统特性对比

1 uC/OS系列的发展历史

uC/OS (Micro-Controller Operating System)是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务操作系统,具有高度可移植性,特别适合于微处理器和控制器,是目前应用最广泛的实时操作系统(RTOS)。

uC/OS最早出自于1992年美国嵌入式系统专家Jean J.Labrosse在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,Jean J.Labrosse同时把uC/OS 的源码发布在了该杂志的B B S 上。

1998年Jean J.Labrosse创建了Micriu公司,并推出了改进版本的uC/OSII。主要增加了堆检查、勾子函数以及安全的动态内存分配机制等功能。由于安全可靠、移植性好、安全性高,uC/OSII获得了极大的关注和成功,使其成为比较流行的嵌入式实时操作系统之一。1999年11月推出了uC/OSII的第二个版本,主要增加了事件标志、互斥信号量两个重要的任务间通信功能。

2009年推出了改进版本的uC/OSIII。uC/OSII经过多年的使用和大量开发者的反馈,一些很少使用的功能被删除或者更新,添加了更高效的功能和服务,由此便形成了uC/OSIII。uC/OSIII和uC/OSII相比具有脱胎换骨的改变,在很多方面都有重大改进,最主要的改变应该是增加了时间片轮转法(round robin)。特别的,uC/OSIII被设计用于32位处理器,但是它也能在16位或者8位处理器中很好的工作。

目前uC/OS已经拥有比较良好的开发生态环境。Micriu公司不仅开发uC/OS内核,还在uC/OS基础上开发了一系列针对专门应用场合的软件产品,比较有名的有以下这些:

通信协议栈:uC/CANuC/TCP-IPuC/USB-DeviceuC/USB-Host

网络应用:uC/DHCPcuC/HTTPsuC/Modbus

显示系统:uC/GUI

文件系统:uC/FS

程序模块:uC/ClkuC/LCDuC/Shell

系统调试工具:uC/ProbeuC/Trace

这些专用软件程序模块使uC/OS的功能变的越来越强大。同时Micriu公司还针对市面上的主流处理器进行了uC/OS移植,并提供源代码。可以从官方网站下载移植后的工程源代码。

2 uC/OS不同版本对比

uC/OS的3个版本的特性对比。

uC/OSII 和 uC/OSIII 系统特性对比

3 uC/OSIII的新特性介绍

uC/OSIII是一个可裁剪、可固化、可剥夺的多任务系统,没有任务数目的限制。相比于uC/OSII增加了很多新的特性。

同优先级任务的时间片轮转调度

这个是uC/OSIII和uC/OSII相比一个重大的改变。uC/OSIII允许一个任务优先级被多个任务使用,当这个优先级处于最高就绪态的时候,uC/OSIII就会轮流调度处于这个优先级的所有任务,让每一个任务运行一段由用户指定的时间长度(时间片)。每一个任务可以定义不同的时间片。当任务用不完时间片时可以让出CPU给另一个任务。

极短的关中断时间

uC/OSIII可以采用锁定内核调度的方式而不是关中断的方式来保护临界段代码,这样就可以将关中断的时间降到最低,使得uC/OSIII能够非常快速的响应中断请求。

同时等待多个内核对象

uC/OSIII允许一个任务同时等待多个事件。也就是说,一个任务能够挂起在多个信号量或消息队列上,当其中任何一个等待的事件发生时,等待任务就会被唤醒。

直接向任务发送信号

uC/OSIII允许中断或者任务直接给另一个任务发送信号,避免创建和使用诸如信号量或事件标志等内核对象作为向其他任务发送信号的中介,该特性有效地提高了系统性能。

直接向任务发送消息

uC/OSIII允许中断或者任务直接给另一个任务发送消息,避免创建和使用消息队列作为中介。

任务级时钟节拍处理

uC/OSIII的时钟节拍是通过一个专门任务完成的,定时中断仅触发该任务。将延迟处理和超时判断放在任务级代码完成,能极大地减少中断延迟时间。

用汇编语言优化的调度器

uC/OSIII的调度器采用了汇编语言进行了优化,执行速度更快。

任务数目不受限制

uC/OSIII本身是没有任务数目限制的,但是从实际应用角度考虑,任何数目都会受到CPU所使用的存储空间的限制,包括代码空间和数据空间。

优先级数量不受限制

uC/OSIII支持无限多的任务优先级。

内核对象数目不受限制

uC/OSIII允许定义任意数目的内核对象。内核对象指任务、信号量、互斥信号量、事件标志组、消息队列、定时器和存储快等。

运行时可配置

uC/OSIII允许用户在运行时配置内核。特别的,所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列、消息、互斥信号量、内存分区、软件定时器等都是在运行时分配的,以免在编译时过度分配。

内置的性能测量(增强)

uC/OSIII相比uC/OSII强化了内置性能测量。能够测量每一个任务的执行时间、每个任务的堆栈使用情况、任务的执行次数、CPU的使用情况、ISR到任务的切换时间、任务到任务的切换时间、列表中的峰值数、关中断或锁调度器的时间。

防止死锁:所有uC/OSIII的“等待”功能都提供了超时检测机制,有效避免了死锁。

以上这些新特性归纳起来就三大点改进:

第一:增加了同优先级任务的时间片轮转调度

第二:提高系统的任务调度及切换速度,以系统的实时性进一步提高

第三:解除了任务、优先级和内核对象的一些限制

4 uC/OSII和uC/OSIII的应用场合

uC/OSII和uC/OSIII的应用场合基本是一致的,那就是资源受限制的嵌入式系统,特别是单片机、DSP、ARM7、cortex-M等小型嵌入式系统。

uC/OSIII相对于uC/OSII有重大提升,因此在设计时优先选择uC/OSIII。

当然了如果设计的系统功能很简单,那么选择哪一个都无所谓了。

如果设计的系统功能简单,但是对可靠性要求很高,可以优先考虑采用uC/OSII。因为uC/OSII系统功能简单,开发难度略低,而且经过多年的实践改进,所以安全性更高。

如果希望系统中每一个任务都完整执行不被其他任务打断,那么采用uC/OSIII正合适。

5 类uC/OS免费实时操作系统简介

uC/OS虽然开放源代码,但不是完全免费的。如果用于学习是免费的,用于商业产品开发则需要购买授权。网上搜了一下授权大概需要3万块钱。这是一笔不小的费用。

随着嵌入式技术的发展,也出现了许多类uC/OS的实时操作系统。其中有很多是完全免费的。这其中比较有代表性的当属FreeRTOS、RT-Thread。

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为10.0.1版。

RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoT OS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过11年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过两千万台,成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。

RT-Thread拥有良好的软件生态,支持市面上所有主流的编译工具如GCC、Keil、IAR等,工具链完善、友好,支持各类标准接口,如POSIX、CMSIS、C++应用环境、Javascript执行环境等,方便开发者移植各类应用程序。商用支持所有主流MCU架构,如ARM Cortex-M/R/A, MIPS, X86, Xtensa, C-Sky, RISC-V,几乎支持市场上所有主流的MCU和Wi-Fi芯片。

【参考】《STM32F1 uC/OS 开发手册 V2.0》——正点原子