当前位置:  开发笔记 > 开发工具 > 正文

FreeRTOS和CMSIS-RTX之间的区别

如何解决《FreeRTOS和CMSIS-RTX之间的区别》经验,为你挑选了2个好方法。

FreeRTOS和CMSIS-RTOS有什么区别?谁能解释两个RTOS是相似还是不同?



1> zserge..:

我觉得这里混乱的根源是存在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



2> Clifford..:

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感知支持,这可能对开发有所帮助,尽管可能不是必需的。


@RealtimeRik:在优化上下文切换的建议中,我可能没有使用过“ configUSE_PORT_OPTIMISED_TASK_SELECTION = 1”-它可能已经在我使用的端口中进行了设置-可以想象。除了这种可能性之外,这是一个类似的比较。FAQ中没有记录84个CPU周期的时间。我的计时是从用户C代码级别的一项任务的阻塞到另一项的取消阻塞进行的-即从对一项任务的阻塞函数的调用直到从另一项任务的阻塞函数的返回,所以包括任何IPC API高架。
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有