FreeRTOS和CMSIS-RTX之间的区别

时间:2017-01-25 18:20:57

标签: rtos freertos cmsis

FreeRTOS和CMSIS-RTOS有什么区别?任何人都可以解释这两个实时操作系统是如何相似或不同的吗?

3 个答案:

答案 0 :(得分:4)

在 CMSIS包含RTOS规范之前,我使用过RTX ,并将其与FreeRTOS进行了比较。那时RTX在某种程度上更加原始,特别是在它对定时器的支持方面。我不知道CMSIS-RTX中是否有所改变。

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

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

答案 1 :(得分:2)

基本上FreeRTOS 是RTOS,而CMSIS-RTOS只是任何RTOS的包装器(如FreeRTOS,CMSIS-RTOS RTX或任何你想要的东西)。

答案 2 :(得分:2)

我认为这里存在混淆的原因是存在CMSIS-RTOS API(v1v2),并且有CMSIS-RTOS RTX,它是ARM的独立操作系统(和由ARM制造,实现了这个API。

这个想法是为RTOS创建一个通用的抽象层,所以如果对FreeRTOS队列不满意的话 - 他可以选择相同RTOS API的另一个实现而不需要更改他的固件源。

虽然我认为RTOS制造商违反CMSIS-RTOS就像MCU供应商违反CMSIS驱动程序API一样,但我个人更喜欢CMSIS-RTOS API。应该有许多包装器提供一层兼容的宏,以使现有的RTOS与CMSIS-RTOS API兼容。我只知道PolyMCU的尝试: