FreeRTOS和CMSIS-RTX之间的区别



FreeRTOS和CMSIS-RTOS之间有什么区别?有人能解释一下这两个RTO是如何相似或不同的吗?

我认为这里的混淆源是存在CMSIS-RTOS API(v1和v2),还有CMSIS-RTOS RTX,它是ARM的独立操作系统(由ARM制造),它实现了非常API。

这个想法是为RTOS创建一个公共抽象层,因此,如果对FreeRTOS队列不满意,他/她可以选择同一RTOS API的另一个实现,而无需大量更改他的/她的固件源。

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

  • FreeRTOS-https://github.com/labapart/polymcu/blob/master/RTOS/FreeRTOS/cmsis/cmsis_os.h
  • 臂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比5us)。

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

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

最新更新