FreeRTOS和CMSIS-RTX的区别

7

FreeRTOS和CMSIS-RTOS有什么区别?有人能解释一下这两个RTOS的相似之处和不同之处吗?

3个回答

14
我认为这里的混淆源于CMSIS-RTOS API(v1v2)的存在,以及CMSIS-RTOS RTX,它是ARM的独立操作系统,实现了那个API。
这个想法是为RTOS创建一个通用的抽象层,因此,如果一个人不喜欢FreeRTOS队列,他/她可以选择另一个实现相同RTOS API的实现,而不需要大量更改他/她的固件源代码。
尽管我认为RTOS制造商会像MCU供应商违反CMSIS Driver API一样违反CMSIS-RTOS,但我个人更喜欢CMSIS-RTOS API。应该有一些包装器提供兼容的宏层,使现有的RTOS与CMSIS-RTOS API兼容。我只知道PolyMCU尝试过:

8

我曾经使用过RTX,在CMSIS包含RTOS规范之前,与FreeRTOS进行了比较。当时,相对于定时器的支持方面,RTX比较原始。我不知道在CMSIS-RTX中是否有所改变。

两者都使用基于优先级的抢占式调度,在这个意义上都是“传统”的,但是FreeRTOS的内部设计有些不同寻常。在大多数RTOS中,所有其他API服务都是从互斥锁创建的基本原语,而在FreeRTOS中,最基本的原语是“队列”。因此,“简单”的原语,如信号量和互斥锁,是从更复杂的队列创建的,而不是从更直观地从简单事物构建复杂事物。我想这种设计对性能有一定影响。即使没有这个问题,我发现即使在Cortex-M3 72MHz上,FreeRTOS中的上下文切换也比RTX慢得多(15us vs 5us)。

FreeRTOS当然是“免费”的,而RTX则包含在Keil的许可商业开发工具中。如果您正在使用这些工具,IDE和调试器中可能会有一定程度的RTOS感知支持,这可能有助于开发,但并非必需。


1
值得注意的是,“一切皆队列”的这种不寻常的想法导致在FreeRTOS中,互斥锁或信号量通常比其他任何RTOS占用3-4倍的RAM。 - Freddie Chopin
1
值得注意的是,FreeRTOS的上下文切换时间取决于许多因素(与所有RTOS一样),如堆栈检查、运行时统计等。可以查看http://www.freertos.org/FAQMem.html的“What is the context switch time”来了解更多信息。它比您想象的要高效得多! - Realtime Rik
2
@RealtimeRik:在优化上下文切换的建议中,我可能没有使用“configUSE_PORT_OPTIMISED_TASK_SELECTION=1” - 在我使用的端口中可能已经设置了它 - 人们会这样想。除此之外,这是一种逐字逐句的比较。FAQ没有记录84个CPU周期的时间;我的计时是从一个任务阻塞到另一个任务解除阻塞的用户C代码级别开始的 - 也就是从一个任务的阻塞函数调用到另一个任务的阻塞函数返回,因此包括任何IPC API开销。 - Clifford

5
基本上,FreeRTOS 是一个实时操作系统(RTOS),而 CMSIS-RTOS 只是任何RTOS(如FreeRTOS、CMSIS-RTOS RTX或您想要的任何RTOS)的包装器。

你能分享更多细节吗? - Bilal Qamar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接