[RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点
本篇博客就来细数这几个RTOS的特点。
以下内容均来自官方网站或者官方手册Feature的Google翻译的加了我的一些调整,没有任何主观成分。
1. FreeRTOS
FreeRTOS是专为小型嵌入式系统设计的可扩展的实时内核。
亮点包括:
- 微小的封装形式。
- 免费的RTOS调度程序
- 免费嵌入式软件源代码。
- 免版税。
- 抢占式,协作式和混合配置选项,可选时间分片。
- SafeRTOS衍生产品对代码完整性提供了高度的信心。
- 包括一个为低功耗应用设计的tickless模式。
- 可以使用动态或静态分配的RAM来创建RTOS对象(任务,队列,信号量,软件定时器,互斥体和事件组)。
- 官方支持>30个嵌入式系统架构(以ARM7和ARM Cortex-M3为一体架构)。
- FreeRTOS-MPU支持ARM Cortex-M3内存保护单元(MPU)。
- 设计小巧,简单易用。通常,RTOS内核二进制映像将在4K到9K字节的区域内。
- 可移植性非常好的源代码结构,主要用C.
- 支持实时任务和协同程序。
- 直接到任务通知,队列,二进制信号量,计数信号量,递归信号量和互斥体,用于任务之间的通信和同步,或实时任务和中断之间。
- 创新事件组(或事件标志)实施。
- 具有优先级继承的互斥体。
- 高效的软件定时器。
- 强大的执行跟踪功能。
- 堆栈溢出检测选项。
- 免费监控的论坛支持或可选的商业支持和许可。
- 对可创建的实时任务数量没有软件限制。
- 对可以使用的任务优先级的数量没有软件限制。
- 对任务优先级分配没有限制 - 可以为多个实时任务分配相同的优先级。
- 许多支持的架构的免费开发工具。
- 从标准的Windows主机开发。
2. uCOS家族(I/II/III)
μ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 |
3. RT-Thread
Tips:在markdown中实现段落缩进
-半方大的空白 或
-全方大的空白 或
-不断行的空白格 或
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这个系统还是有很多自己的想法在里面的,比如Finish,设备树等都是参照Linux的思想来设计的。
4. RTX
Keil RTX是为ARM和Cortex-M设备设计的免版税,确定性的实时操作系统。它允许您创建同时执行多个功能的程序,并帮助创建更好的结构和更容易维护的应用程序。
特征
- 具有源代码的免版权,确定性RTOS
- 灵活的调度:循环,抢占和协作
- 具有低中断延迟的高速实时操作
- 为资源有限的系统提供小封装
- 无限数量的任务每个具有254个优先级
- 无限数量的邮箱,信号量,互斥量和计时器
- 支持多线程和线程安全操作
- 内核感知调试支持MDK-ARM
- 使用μVision配置向导的基于对话框的设置
优点
尽管无需实时操作系统(通过在超级循环中执行一个或多个功能)就可以创建实时程序,但KeilRTX为您解决的RTOS有许多调度,维护和计时问题。
注意事项
所有MDK-ARM版本都包含RTX源代码。
这个系统我只是用过一次,感觉最大的特点就是用起来简单,不需要那么多的注意事项,拿来就用的感觉,还有就是没有关中断的操作,所以你懂的~
[RTOS]--uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点的更多相关文章
- 【RTOS】FreeRTOS中的任务堆栈溢出检测机制
目录 前言 任务堆栈 堆栈溢出 任务堆栈溢出检测机制 API 两种堆栈溢出检测方式 堆栈溢出钩子函数 内核何时检测任务堆栈溢出 任务堆栈溢出检测存在的局限性 前言 注意:本笔记发布时可能忘记补充查看d ...
- RT-Thread RTOS
RT-ThreadRTOS是一款来自中国的开源实时操作系统,由RT-Thread工作室的专业开发人员开发.维护. 起初RT-Thread是一个实时的内核(全抢占优先级调度,调度器时间复杂度O(1)), ...
- LiteOS的内核——RTOS基本的特性
在其他的rtos中,基本上也有类似的功能,ucos freertos,要是rtos的时候,务必选择自带的rtos功能,和裸机运行时有区别的
- Multi-tasking RTOS for microprocessors with limited memory by saving only a single return address per task during context switching
A real-time operating system (RTOS) for use with minimal-memory controllers has a kernel for managin ...
- Nucleus SE RTOS初始化和启动
Nucleus SE RTOS初始化和启动 Nucleus SE RTOS initialization and start-up 对于任何类型的操作系统,都有某种类型的启动机制.具体的工作方式因系统 ...
- RTOS诊断和错误检查
RTOS诊断和错误检查 RTOS diagnostics and error checking 查看RTOS显示系列 错误处理不太可能是任何用于嵌入式系统应用程序的操作系统的主要功能.这是资源限制的必 ...
- 不可被忽视的操作系统( FreeRTOS )【1】
把大多数人每个星期的双休过过成了奢侈的节假日放假,把每天23点后定义为自己的自由时间,应该如何去思考这个问题 ? 双休的两天里,不!是放假的两天里,终于有较长的时间好好的学习一下一直断断续续的Free ...
- STM32F429i-DISCO FreeRTOS keil STM32CubeMX
目标: 在STM32F429 Disco开发板上用FreeRTOS双线程点亮双闪led. 准备: 0. STM32F429i-DISCO 1. keil ARMMDK 5.13 2. STM32Cub ...
- RTX——第11章 临界段,任务锁和中断锁
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被 ...
随机推荐
- log4j:WARN Please initialize the log4j system properly.
在tomcat启动的时候,出现这个警告: log4j:WARN No appenders could be found for logger (org.apache.commons.digester. ...
- python学习(十一)函数、作用域、参数
定义和调用函数 在这里函数的定义和调用和一般的语句没什么不一样,感觉函数也是对象 #!/usr/bin/python def times(x, y): # 定义函数 ...
- ArrayList中contains,remove方法返回为false的原因
这几天做一个项目时,遇到ArrayList.remove(Object)方法失败,而ArrayList"包含"删除的对象,这其中的"包含"不是完全包含,请看下面 ...
- 通信协议之sdp---sdp会话协议
(1)sdp 描述格式 (2)sdp example (3) sdp (1)sdp 描述格式 m=video 1234 RTP/AVP 96a=rtpmap:96 H264a=framerate:15 ...
- ios math.h 常用数学函数
1. 三角函数 double sin (double);正弦 double cos (double);余弦 double tan (double);正切 2 .反三角函数 double as ...
- iOSPOI检索详细总结
iOS百度地图路径规划和POI检索详细总结 路径规划.png 百度地图的使用 百度地图API的导入网上说了许多坑,不过我遇到的比较少,这里就放两个比较常见的吧.坑一: 奥联WIFI_xcodeproj ...
- 【BZOJ3679】数字之积 DFS+DP
[BZOJ3679]数字之积 Description 一个数x各个数位上的数之积记为f(x) <不含前导零>求[L,R)中满足0<f(x)<=n的数的个数 Input 第一行一 ...
- Python中属性
属性定义的两种方式: 1.num1=property(GetNum,SetNum) class Pro(): def __init__(self): self._num= def GetNum(s ...
- JS深入理解系列(一):编写高质量代码
在for循环中,你可以循环取得数组或是数组类似对象的值,譬如arguments和HTMLCollection对象.通常的循环形式如下: // 次佳的循环for (var i = 0; i < m ...
- 九度OJ 1152:点菜问题 (01背包、DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1046 解决:543 题目描述: 北大网络实验室经常有活动需要叫外买,但是每次叫外买的报销经费的总额最大为C元,有N种菜可以点,经过长时间的 ...