因此,目前我正在研究将纯C++17项目用于嵌入式设备(Cortex m4)的可能性。但基于这是一个嵌入式设备,我们有端口,使用实时操作系统,如FreeRTOS或uc-OS,我非常喜欢使用std::thread (因此,如果需要的话,我们可以轻松地交换实时操作系统)。是否有一种方法可以覆盖C++中的线程类来使用依赖于平台的RTOS?
提前感谢
发布于 2020-01-29 06:16:32
是否有一种方法可以覆盖C++中的线程类来使用依赖于平台的实时操作系统?
要做到这一点并不容易,但正如@Arthur Passo所指出的那样,其他人也曾尝试过这样做。即使这样,也不只是简单地覆盖OS特定的类,而是需要在需要特定于OS的调用时挂钩toochain调用来查看FreeRTOS api。这反过来又会引发许多问题,涉及如何在不同的编译器版本之间保持可维护性。
由于几个月前我一直在进行类似的调查,我认为最好的解决办法是以下之一。(鉴于维护方面的灵活性和便利性,我个人将坚持备选案文1)。
发布于 2020-01-27 19:46:22
没有办法告诉std::thread使用FreeRTOS::thread (这是虚构的),但是您可以使用条件编译和类似的类型别名
#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
#endifthread_t将是实现中的线程类型,如果没有找到符号,则返回到std::thread。
https://stackoverflow.com/questions/59937763
复制相似问题