首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式设备-> std::线程-> FreeRTOS?

嵌入式设备-> std::线程-> FreeRTOS?
EN

Stack Overflow用户
提问于 2020-01-27 19:36:41
回答 2查看 1.9K关注 0票数 3

因此,目前我正在研究将纯C++17项目用于嵌入式设备(Cortex m4)的可能性。但基于这是一个嵌入式设备,我们有端口,使用实时操作系统,如FreeRTOS或uc-OS,我非常喜欢使用std::thread (因此,如果需要的话,我们可以轻松地交换实时操作系统)。是否有一种方法可以覆盖C++中的线程类来使用依赖于平台的RTOS

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-01-29 06:16:32

是否有一种方法可以覆盖C++中的线程类来使用依赖于平台的实时操作系统?

要做到这一点并不容易,但正如@Arthur Passo所指出的那样,其他人也曾尝试过这样做。即使这样,也不只是简单地覆盖OS特定的类,而是需要在需要特定于OS的调用时挂钩toochain调用来查看FreeRTOS api。这反过来又会引发许多问题,涉及如何在不同的编译器版本之间保持可维护性。

由于几个月前我一直在进行类似的调查,我认为最好的解决办法是以下之一。(鉴于维护方面的灵活性和便利性,我个人将坚持备选案文1)。

  1. 让您自己的C++ OS抽象层建立在大多数RTOS提供者支持的CMSIS 之上(,KeilRTX,Chibi支持它,我相信uc也支持它)。这使得使用多个RTOSes的单个抽象变得更容易,只要构建系统能够根据所使用的RTOS来链接正确的文件。同时,这为您配置线程优先级、堆栈大小等提供了充分的灵活性,如果您使用类似posix api的内容,这可能是不可能的。
  2. 在POSIX之上创建您自己的C++ OS抽象层。FreeRTOS提供了一个POSIX POSIX/index.html,我相信其他人也会有类似的变体。
票数 3
EN

Stack Overflow用户

发布于 2020-01-27 19:46:22

没有办法告诉std::thread使用FreeRTOS::thread (这是虚构的),但是您可以使用条件编译和类似的类型别名

代码语言:javascript
复制
#ifdef FREE_RTOS                  // you will need to get the correct symbol from the implementation to check for
using thread_t = FreeRTOS::thread // you will need to use the correct type here
#elif defined(OTHER_RTOS)
using thread_t = OtherRTOS::thread
#else
using thread_t = std::thread
#endif

thread_t将是实现中的线程类型,如果没有找到符号,则返回到std::thread

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59937763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档