FreeRTOS和CMSIS-RTOS有什么区别?谁能解释两个RTOS是相似还是不同?
我觉得这里混乱的根源是存在CMSIS-RTOS API(V1和V2),并有CMSIS-RTOS RTX,这是ARM一个独立的OS(由ARM制造),它实现了非常API。
这个想法是为RTOS创建一个通用的抽象层,因此,如果一个人对FreeRTOS队列不满意,他可以选择同一RTOS API的另一种实现,而无需大量更改固件资源。
尽管我认为RTOS制造商将违反CMSIS-RTOS,就像MCU供应商违反CMSIS驱动程序API一样,但我个人更喜欢CMSIS-RTOS API。应该有很多包装器,它们提供了一层兼容的宏,以使现有的RTOS与CMSIS-RTOS API兼容。我只知道PolyMCU的尝试:
FreeRTOS- https://github.com/labapart/polymcu/blob/master/RTOS/FreeRTOS/cmsis/cmsis_os.h
ARM RTX- https://github.com/labapart/polymcu/blob/master/RTOS/RTX/INC/cmsis_os.h
RiotOS- https://github.com/labapart/polymcu/blob/master/RTOS/RioTOS/include/cmsis_os.h
在 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感知支持,这可能对开发有所帮助,尽管可能不是必需的。