FreeRTOS 和 CMSIS-RTOS 有什么区别?谁能解释这两个 RTOS 的相似之处或不同之处?
3 回答
我认为这里混淆的根源在于存在 CMSIS-RTOS API(v1和v2),并且存在CMSIS-RTOS RTX,它是 ARM 的独立操作系统(由 ARM 制造),它实现了非常 API。
这个想法是为 RTOS 创建一个通用抽象层,因此如果一个人对 FreeRTOS 队列不满意 - 他/她可以选择相同 RTOS API 的另一个实现,而无需大量更改他/她的固件源。
虽然我认为 RTOS 制造商会违反 CMSIS-RTOS,就像 MCU 供应商违反 CMSIS Driver API 一样,但我个人更喜欢 CMSIS-RTOS API。应该有许多包装器提供一层兼容的宏,以使现有的 RTOS 与 CMSIS-RTOS API 兼容。我只知道 PolyMCU 的尝试:
在 CMSIS 包含 RTOS 规范之前,我使用了 RTX ,并将其与 FreeRTOS 进行了比较。那时,RTX 比较原始,特别是在它对定时器的支持方面。我不知道这在 CMSIS-RTX 中是否发生了变化。
两者都使用基于优先级的调度,从这个意义上说是“传统的”,但是 FreeRTOS 的内部设计有些不寻常。在大多数 RTOS 中,创建所有其他 API 服务的基本原语是互斥体,但在 FreeRTOS 中,基本原语是队列。因此,信号量和互斥量等“简单”原语是从更复杂的队列中创建的——而不是从简单的事物中构建的更直观的复杂事物。我想这种设计对性能有一些影响。即使没有,我发现即使在 FreeRTOS 中切换上下文也比 RTX 花费的时间要长得多(在 72MHz 的 Cortex-M3 上为 15us 和 5us)。
FreeRTOS 当然是“免费的”,而 RTX 包含在 Keil 的许可商业开发工具中。如果您使用这些工具,那么 IDE 和调试器中对 RTX 有一定程度的 RTOS 感知支持,这可能对开发有所帮助,尽管可能不是必需的。
基本上 FreeRTOS是一个 RTOS,而 CMSIS-RTOS 只是任何 RTOS(如 FreeRTOS、CMSIS-RTOS RTX 或您想要的任何东西)的包装器。