如何将 C++ 系统调用连接到 freertos
How to connect C++ system calls to freertos
我想用 free-rtos 为微控制器写一个多线程程序。但我不想使用非标准的免费 rtos 函数,相反,我想使用本机 c++ 库来 运行 并行和异步任务。但我不知道如何编写一个适配器来将创建线程的 C++ 系统调用连接到 free-rtos 函数。
mcu: 手臂皮质 m4 stm32f407
c++ 版本:17
似乎 FreeRTOS 有一个 POSIX threads adaptor 层。它是一个子集,但可能足以从 GNU libstdc++
或 clang libc++
构建 thread
、mutex
和 future
。您几乎肯定需要一个有效的 std::atomic
实现。
POSIX 线程中有很多问题是由于它对各种类 UNIX 操作系统的改造而导致的,您很可能不希望这些位不受支持。有充分的理由,它不是许多 RTOS 的默认线程 API。
标准定义了一个接口,它指定了语法,可能定义了一些性能要求,但它不会定义如何实现任务调度程序,这是编译器的职责。
实际上,std::thread
通常是一个包装器,它使用来自 OS(或更低层)的线程并依赖于它们。如果你有一个 C++11 兼容的编译器来包含 std::thread
,显然你不需要做任何事情。否则,您必须编写自己的抽象层代码或使用其他人编写的包装器,互联网上有很多想法,即:https://www.codeproject.com/Articles/1278513/Cplusplus11-FreeRTOS-GCC
我想用 free-rtos 为微控制器写一个多线程程序。但我不想使用非标准的免费 rtos 函数,相反,我想使用本机 c++ 库来 运行 并行和异步任务。但我不知道如何编写一个适配器来将创建线程的 C++ 系统调用连接到 free-rtos 函数。
mcu: 手臂皮质 m4 stm32f407
c++ 版本:17
似乎 FreeRTOS 有一个 POSIX threads adaptor 层。它是一个子集,但可能足以从 GNU libstdc++
或 clang libc++
构建 thread
、mutex
和 future
。您几乎肯定需要一个有效的 std::atomic
实现。
POSIX 线程中有很多问题是由于它对各种类 UNIX 操作系统的改造而导致的,您很可能不希望这些位不受支持。有充分的理由,它不是许多 RTOS 的默认线程 API。
标准定义了一个接口,它指定了语法,可能定义了一些性能要求,但它不会定义如何实现任务调度程序,这是编译器的职责。
实际上,std::thread
通常是一个包装器,它使用来自 OS(或更低层)的线程并依赖于它们。如果你有一个 C++11 兼容的编译器来包含 std::thread
,显然你不需要做任何事情。否则,您必须编写自己的抽象层代码或使用其他人编写的包装器,互联网上有很多想法,即:https://www.codeproject.com/Articles/1278513/Cplusplus11-FreeRTOS-GCC