0%

主流嵌入式操作系统

μCLinux

μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。

μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。

综上可知,μClinux最大特点在于针对无MMU处理器设计,这对于没有MMU功能的stm32f103来说是合适的,但移植此系统需要至少512KB的RAM空间,1MB的ROM/FLASH空间,而stmf103拥有256K的FLASH,需要外接存储器,这就增加了硬件设计的成本。

μClinux结构复杂,移植相对困难,内核也较大,其实时性也差一些,若开发的嵌入式产品注重文件系统和与网络应用则μClinux是一个不错的选择。

μC/OS-II

μC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。

在文件系统的支持方面,由于μC/OS-II是面向中小型嵌入式系统的,即使包含全部功能,编译后内核也不到10 KB,所以系统本身并没有提供对文件系统的支持。但是μC/OS-II具有良好的扩展性能,如果需要也可自行加入文件系统的内容。

在对硬件的支持上,μC/OS-II能够支持当前流行的大部分CPU,μC/OS-II由于本身内核就很小,经过裁剪后的代码最小可以为2KB,所需的最小数据RAM空间为4 KB,μC/OS-II的移植相对比较简单,只需要修改与处理器相关的代码就可以。

综上可知,μC/OS-II是一个结构简单、功能完备和实时性很强的嵌入式操作系统内核,针对于没有MMU功能的CPU,它是非常合适的。它需要很少的内核代码空间和数据存储空间,拥有良好的实时性,良好的可扩展性能,并且是开源的,网上拥有很多的资料和实例,所以很适合向stm32f103这款CPU上移植。

  μC/ OS-II和μC/ OS-III是抢占式,高度便携式和可扩展的实时内核。这些内核旨在便于在大量CPU架构上使用,这些内核是μC/ OS实时操作系统的关键组件。

关键价值(Key Values):

  • 可移植性。 提供前所未有的易用性,μC/OS内核提供完整的源代码和深入的文档。 μC/ OS内核运行在大量处理器架构上,端口可供下载。
  • 可扩展性。 μC/ OS内核允许无限制的任务和内核对象。内核的内存占用可以缩小,仅包含应用程序所需的功能,通常为6-24 KB的代码空间和1KB的数据空间。
  • 可靠。 μC/ OS内核包括减少开发时间的调试功能。内核提供广泛的范围检查,包括检查API调用中传递的指针,来自ISR的任务级服务,允许范围内的参数以及有效的指定选项。
  • 高效。 Micrium的内核还包括有价值的运行时统计信息,使您的应用程序的内部可视化。 识别性能瓶颈,并在开发周期的早期优化电源使用。

μC/ OS内核的特性包括以下亮点(Highlights):

  • 抢占式多任务实时内核,可选择循环调度
  • 提供完整,干净,一致的源代码,具有深入的文档。
  • 高可扩展性:无限数量的任务,优先级和内核对象
  • 同时等待多个内核对象
  • 直接向任务发送信号/消息
  • 资源高效:6K至24K字节代码空间,1K +字节数据空间)
  • 非常低的中断禁用时间
  • 广泛的性能测量指标(可配置)
  • 可用于关注安全型应用

下表显示了µC/OS 多年来的演变, 比较了每个版本中可用的功能。

特点(Features) µC/OS µC/OSII µC/OSIII
发布年份 1992 1998 2009
提供源代码
书(Book)
抢占式多任务
最大任务量 64 255 无限
每个优先级别的任务数 1 1 无限
时间片轮转调度 × ×
信号量
互斥信号量 × √(可嵌套)
事件标志组 ×
消息邮箱 ×(不需要)
消息队列
固定大小的内存管理 ×
直接向任务发送信号量 × ×
无需调度的信号发送选项 × ×
直接向任务发送消息 × ×
软件定时器 ×
任务挂起/恢复 × √(可嵌套)
防止死锁
可裁剪
代码量 3K-8K 6K-26K 6K-24K
数据量 1K+ 1K+ 1K+
代码可固化
运行时可配置 × ×
编译时可配置
支持内核对象的 ASCII 命名 ×
同时等待多个内核对象 ×
任务寄存器 ×
内置性能测试 × 基本 增强
内置追踪点 × ×
用户可定义的钩子函数 ×
POST 操作可加时间戳 × ×
内核察觉式调试 ×
用汇编语言优化的调度器 × ×
捕获退出的任务 × ×
任务级时钟节拍处理 ×
系统服务函数的数目 ~20 ~90 ~75

eCOS

eCos(embedded Configurable operating system),即嵌入式可配置操作系统。

它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。

最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。

每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。

eCos操作系统的可配置性非常强大,用户可以自己加入所需的文件系统。eCos操作系统同样支持当前流行的大部分嵌入式CPU,eCos操作系统可以在16位、32位和64位等不同体系结构之间移植。

eCos由于本身内核就很小,经过裁剪后的代码最小可以为10 KB,所需的最小数据RAM空间为10 KB。

在系统移植方面 eCos操作系统的可移植性很好,要比μC/OS-II和μClinux容易。

综上所述,eCos最大特点是配置灵活,并且支持无MMU的CPU的移植,开源且具有很好的移植性,也比较合适于移植到stm32平台的CPU上。但eCOS的应用还不是太广泛,还没有像μC/OS-II那样普遍,并且资料也没有μC/OS-II多。eCos适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。

FreeRTOS

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。

相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。

作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。

FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。

FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。

FreeRTOS的不足:

相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。

其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。

  FreeRTOS是专为小型嵌入式系统设计的可扩展的实时内核。
亮点包括:

  • 微小的封装形式。
  • 免费的RTOS调度程序
  • 免费嵌入式软件源代码。
  • 免版税。
  • 抢占式,协作式和混合配置选项,可选时间分片。
  • SafeRTOS衍生产品对代码完整性提供了高度的信心。
  • 包括一个为低功耗应用设计的tickless模式。
  • 可以使用动态或静态分配的RAM来创建RTOS对象(任务,队列,信号量,软件定时器,互斥体和事件组)。
  • 官方支持>30个嵌入式系统架构(以ARM7和ARM Cortex-M3为一体架构)。
  • FreeRTOS-MPU支持ARM Cortex-M3内存保护单元(MPU)。
  • 设计小巧,简单易用。通常,RTOS内核二进制映像将在4K到9K字节的区域内。
  • 可移植性非常好的源代码结构,主要用C.
  • 支持实时任务和协同程序。
  • 直接到任务通知,队列,二进制信号量,计数信号量,递归信号量和互斥体,用于任务之间的通信和同步,或实时任务和中断之间。
  • 创新事件组(或事件标志)实施。
  • 具有优先级继承的互斥体。
  • 高效的软件定时器。
  • 强大的执行跟踪功能。
  • 堆栈溢出检测选项。
  • 免费监控的论坛支持或可选的商业支持和许可。
  • 对可创建的实时任务数量没有软件限制。
  • 对可以使用的任务优先级的数量没有软件限制。
  • 对任务优先级分配没有限制 - 可以为多个实时任务分配相同的优先级。
  • 许多支持的架构的免费开发工具。
  • 从标准的Windows主机开发。

mbed OS

开源嵌入式操作系统,ARM公司将mbed OS免费提供给所有厂商使用,mbed提供了一个相对更加系统和更加全面的智能硬件开发环境。

主要功能:

提供用于开发物联网设备的通用操作系统基础,以解决嵌入式设计的碎片化问题。支持所有重要的连接性与设备管理开放标准,以实现面向未来的设计。使安全可升级的边缘设备支持新增处理能力与功能。通过自动电源管理解决复杂的能耗问题。

主要特点:

开发速度快,功能强大,安全性高,为了量产化而设计,可离线开发,也可以在网页上编辑。

RTX

是ARM公司的一款嵌入式实时操作系统,使用标准的C结构编写,运用RealView编译器进行编译。不仅仅是一个实时内核,还具备丰富的中间层组件,不但免费,而且代码也是开放的。

主要功能:

开始和停止任务(进程),除此之外还支持进程通信,例如任务的同步、共享资源(外设或内存)的管理、任务之间消息的传递。开发者可以使用基本函数去开启实时运行器,去开始和终结任务,以及去传递任务间的控制(轮转调度)。开发者可以赋予任务优先级。

主要特点:

支持时间片,抢占式和合作式调度。不限制数量的任务,每个任务都具有254的优先级。不限制数量的信号量,互斥信号量,消息邮箱和软定时器。支持多线程和线程安全操作。使用MDK基于对话框的配置向导,可以很方便的完成MDK的配置。

简介

​ Keil RTX是为ARM和Cortex-M设备设计的免版税,确定性的实时操作系统。它允许您创建同时执行多个功能的程序,并帮助创建更好的结构和更容易维护的应用程序。

特征
  • 具有源代码的免版权,确定性RTOS
  • 灵活的调度:循环,抢占和协作
  • 具有低中断延迟的高速实时操作
  • 为资源有限的系统提供小封装
  • 无限数量的任务每个具有254个优先级
  • 无限数量的邮箱,信号量,互斥量和计时器
  • 支持多线程和线程安全操作
  • 内核感知调试支持MDK-ARM
  • 使用μVision配置向导的基于对话框的设置
优点

  尽管无需实时操作系统(通过在超级循环中执行一个或多个功能)就可以创建实时程序,但KeilRTX为您解决的RTOS有许多调度,维护和计时问题。

缺点
注意事项

​ 所有MDK-ARM版本都包含RTX源代码。

VxWorks

美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系(RTOS),具有硬实时、确定性与稳定性,也具备航空与国防、工业、医疗、汽车、消费电子产品、网络及其他行业要求的可伸缩性与安全性。

主要功能:

支持可预测的任务同步机制、支持多任务间的通信、存储器优化管理、操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的。实时时钟服务+中断管理服务。

主要特点:

具有一个高性能的操作系统内核Wind(实时性好、可裁减)友好的开发调试环境、较好的兼容性、支持多种开发和运行环境

QNX

诞生于1980年,是一种商用的遵从POSIX规范的类Unix嵌入式实时操作系统。

主要功能:

支持在同一台计算机上同时调度执行多个任务;也可以让多个用户共享一台计算机,这些用户可以通过多个终端向系统提交任务,与QNX进行交互操作。

主要特点:

核心仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX核心非常小巧(QNX4.x大约为12Kb)而且运行速度极快。

Nuttx

NuttX是一个实时嵌入式操作系统(Embedded RTOS),第一个版本由 Gregory Nutt 于 2007 年在宽松的 BSD 许可证下发布。

主要功能:

可以构建为开放的、平面的嵌入式 RTOS,或单独构建为具有系统调用接口的微内核。容易扩展到新的处理器架构、 SoC 架构或板级架构。实时的、确定性的、支持优先级继承。BSD 套接字接口。优先级管理的扩展。可选的具有地址环境的任务(进程)。

主要特点:

配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。

都江堰操作系统(djyos)

(注意:网友提示都江堰操作系统官网提示,stm32的f4和f7没调通)

都江堰操作系统,简称djyos,得名于一个伟大的水利工程:都江堰。

与传统操作系统不同,djyos不是以线程而是以事件为调度核心,这种调度算法使程序员摆脱模拟计算机执行过程编写程序的思维方式,而是按人类认知世界的方式编写应用程序,就如同在嵌入式编程中引入了VC似的。

djyos的调度算法使程序员可以摆脱线程和进程的束缚,djyos没有有关线程的api,一个完全不懂线程知识的程序员也可以顺利地在djyos下编写应用程序。

djyos 操作系统是以事件为核心进行调度的,这种调度策略使程序员可以按人类认知事物的习惯而不是计算机的习惯来编程。

AliOS Things

据著名媒体嵌入式操作系统RTOS介绍,AliOS Things 是 AliOS 家族旗下、面向 IoT 领域的、高可伸缩的物联网操作系统。AliOS Things将致力于搭建云端一体化IoT基础设施,具备极致性能、极简开发、云端一体、丰富组件、安全防护等关键能力,并支持终端设备连接到阿里云Link,可广泛应用在智能家居、智慧城市、新出行等领域。

点评:****阿里系,背靠阿里资源来势汹汹杀入物联网市场,芯片+模组厂商合作,是非常有力的一个玩家,但这也是其最大的劣势!

Huawei LiteOS

嵌入式操作系统RTOS介绍,Huawei LiteOS 是华为面向IoT领域,构建的轻量级物联网操作系统,以轻量级低功耗、快速启动、互联互通、安全等关键能力,为开发者提供 “一站式” 完整软件平台,有效降低开发门槛、缩短开发周期。

点评:****华为系,不过其开源程度比较低,其主要用于华为自己的产品,有大树罩着。

RT-Thread

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

点评:国内最有可能成为Top 1,优势在于丰富的组件,中立立场!赶上了时机,得到诸多芯片厂商的支持,也挺受开发者喜欢的。****缺点在于本身的教程文档和freertos等之类的比还是很弱。

嵌入式操作系统RTOS推荐的学习资源:

1.文档:https://www.rt-thread.org/document/site/

2.书籍:《 嵌入式实时操作系统:RT-Thread设计与实现 》《 RT-Thread内核实现与应用开发实战指南 基于STM32 》

RT-Thread是一款来自中国的开源嵌入式实时操作系统,由国内一些专业开发人员从2006年开始开发、维护,除了类似FreeRTOS和UCOS的实时操作系统内核外,也包括一系列应用组件和驱动框架,如TCP/IP协议栈,虚拟文件系统,POSIX接口,图形用户界面,FreeModbus主从协议栈,CAN框架,动态模块等,因为系统稳定,功能丰富的特性被广泛用于新能源,电网,风机等高可靠性行业和设备上,已经被验证是一款高可靠的实时操作系统。
  RT-Thread实时操作系统遵循GPLv2+许可证,实时操作系统内核及所有开源组件可以免费在商业产品中使用,不需要公布应用源码,没有任何潜在商业风险。
  RT-Thread实时操作系统核心是一个高效的硬实时核心,它具备非常优异的实时性、稳定性、可剪裁性,当进行最小配置时,内核体积可以到 3k ROM 占用、1k RAM 占用。

  • 任务/线程调度

  在RT-Thread中线程是最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,支持256个线程优先级(也能通过配置文件更改为最大支持32个或8个线程优先级),0优先级代表最高优先级,255优先级留给空闲线程使用;支持创建相同优先级线程,相同优先级的线程采用可设置时间片的轮转调度算法;调度器寻找下一个最高优先级就绪线程的时间是恒定的(时间复杂度是1,即O(1))。系统不限制线程数量的多少,只和硬件平台的具体内存相关。

  • 任务同步机制

  系统支持semaphore(信号量)、mutex(互斥锁)作为线程间同步机制。mutex采用优先级继存方式以解决优先级翻转问题。semaphore的释放动作可安全用于中断服务例程中。同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥锁。

  • 任务间通信机制

  系统支持event(事件)、mbox(邮箱)和MessageQueue(消息队列)等通信机制。event支持多事件”或触发”及”与触发”,适合于线程等待多个事件情况。mbox中一封邮件的长度固定为4字节,效率较MessageQueue更为高效。通信设施中的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。

  • 时间管理

  系统使用时钟节拍来完成同优先级任务的时间片轮转调度;线程对内核对象的时间敏感性是通过系统定时器来实现的;定时器支持软定时器及硬定时器(软定时器的处理在系统线程的上下文中,硬定时器的处理在中断的上下文中);定时器支持一次性超时及周期性超时。

  • 内存管理

  系统支持静态内存池管理及动态内存堆管理。从静态内存池中获取内存块时间恒定,当内存池为空时,可把申请内存块的线程阻塞(或立刻返回,或等待一段时间后仍未获得内存块返回。这取决于内存块申请时设置的等待时间),当其他线程释内存块到内存池时,将把相应阻塞线程唤醒。动态堆内存管理对于不同的系统资源情况,提供了面向小内存系统的小内存管理算法及大内存系统的SLAB内存管理算法

  • 设备管理

  系统实现了按名称访问的设备管理子系统,可按照统一的API界面访问硬件设备。在设备驱动接口上,根据嵌入式系统的特点,对不同的设备可以挂接相应的事件,当设备事件触发时,通知给上层的应用程序。

其他文档信息参见:
RT-Thread 文档中心

RT-Thread这个系统还是有很多自己的想法在里面的,比如Finish,设备树等都是参照Linux的思想来设计的。

SylixOS

嵌入式操作系统RTOS介绍,SylixOS 是一个开源的跨平台的大型实时操作系统(RTOS),SylixOS诞生于2006年,经过十多年的持续开发,SylixOS 已成为功能最为全面的国产操作系统之一。目前已有众多产品和项目应用案例,行业涉及航空航天、军事防务、轨道交通、智能电网、工业自动化等诸多领域。SylixOS 完全符合 POSIX 规范,开源社区丰富的自由软件移植非常方便。

点评: 这家也是挺有意思的,2006年就开始了,吃军工饭,最近一两年才露头角。其实力不容小觑!