【发布时间】:2021-02-05 22:54:48
【问题描述】:
我在带有 keil ide 和 arm 编译器版本 6 和 g++17 的 stm32f407 上使用 freeRTOS,我不喜欢使用 freeRTOS 线程 API。相反,我想使用 std::thread c++ 本机库。但是当我包含#include <thread> 时,keil 会抛出此错误:error: <thread> is not supported on this single threaded system。
有什么问题?
当我有 freeRTOS 时,这意味着我的平台不是单线程的,那么为什么 keil 会抛出这个错误?
【问题讨论】:
-
C++ 标准库是否在 RTOS 上完全工作?它几乎不是“本地的”。您正在接近金属:使用操作系统为您提供的工具。
-
@AsteroidsWithWings 我现在有 3 个线程同时运行! (我用 freeRTOS API 创建了它们)。所以,这意味着它能够进行多线程。对吗?
-
不过,这并不是典型的 C++ 实现所能理解的。它可能正在寻找
pthreads或类似的东西。对于 FreeRTOS 安装来说,C++17 确实是一个非常特殊的选择。通常您会使用 C 语言并使用 FreeRTOS 功能。 -
@AsteroidsWithWings 所以你的意思是没有办法在 freeRTOS 上使用 c++ 线程库?我真的需要使用 c++
std::threads. -
@MahyarShokraeian 您需要实现
std::thread需要的所有操作系统绑定,即 POSIX pthread 函数。我记得我们曾经这样做过,但这不是一件容易的事,我们决定编写自己的线程抽象类,其语义基本相同。这种抽象我们至少可以为我们开发的其他基于 µLinux 的系统保留大部分代码的可移植性。互斥体、信号量和其他相关的东西也是如此。
标签: c++ multithreading stm32 freertos keil