【问题标题】:C++ with STM32CubeMX and Eclipse System Workbench for STM32 AC6 toolsC++ 与 STM32CubeMX 和 Eclipse System Workbench 用于 STM32 AC6 工具
【发布时间】:2018-04-30 03:52:57
【问题描述】:

我使用 STM32CubeMX 为 Nucleo F429ZI 演示板生成了一个 FreeRTOS 项目,在 Eclipse System Workbench for STM32 AC6 工具上成功构建并在演示板上运行。
我想使用 C++stl 库.简单地将main.c 重命名为main.cpp 不起作用...
我看到有人能够将C++ 与FreeRTOS 一起使用,但如果使用此STM32Toolchain 的话,我找不到任何帮助。

【问题讨论】:

  • 将 .c 重命名为 .cpp 不会将您的项目从 C 迁移到 C++。这是编译器 gcc/g++ 和 #inlcude 标头和项目配置的问题。另外,检查您是否包含正确的 STL 库头文件。
  • 使用的确切工具链是什么?使用 gcc 交叉编译器,使用 c++ 应该不是问题。

标签: c++ eclipse stm32 freertos


【解决方案1】:

是的,这是可能的。这并不难(我假设您使用的是标准的 ARM noneabi gcc)。但是您必须记住,CubeMX 中的任何进一步修改都会将您的项目恢复为 C。

  1. 将您的 main.c 重命名为 main.cpp(现在,在编译期间您应该会收到错误 undefined reference to 'main'

  1. 右键单击您的 STM 项目并选择“转换为 C++”。现在编译成功了!

就是这样。请记住,您不能直接从 .c 文件调用 C++ 函数。当函数在 .cpp 文件中并且没有extern "C" 属性时,MCU 也无法调用中断。 无论您是否包含在项目 FreeRTOS 或 STM 准备的任何其他内容中。 C++ 编译器仅适用于 .cpp 文件,不影响 .c 文件。所以他们像以前一样工作。

【讨论】:

  • 我从一个正常工作的 C 普通项目开始,眨了眨眼。我添加了 C++ 性质<nature>org.eclipse.cdt.core.ccnature</nature>,将main.c 重命名为main.cpp,添加了所有包含设置并成功构建。但是调试时程序没有启动并显示STM32F429ZITx.cpu: target state: halted
  • 现在我无法检查这个(我目前无法访问任何板)但我不记得在此更改后调试有任何问题(以我的方式 - 我是不确定您的解决方案是否相同)。记得检查调试器和编译器的版本,如有必要,更新它们。
  • 工具链是Ac6 STM32 MCU GCC。调试器启动,这是最后一个控制台输出:xPSR: 0x01000000 pc: 0x08008d08 msp: 0x20030000 但程序没有运行。看起来它没有找到main() 入口点,即使使用extern "C"
  • 如果可以,请尝试对 startup_stm32f429xx.s 文件进行一些调试。有时第 109 行:bl __libc_init_array 会导致硬故障。我总是通过评论删除这一行,并且从未发现任何问题。由于标准库的实现并与链接器标志相关联,因此出现此问题:-specs=nosys.specs -specs=nano.specs。目前我不记得哪个参数了。我很久没用这个了。
【解决方案2】:

used Eclipse Convert to C++ 菜单而不是New -> Convert to a C/C++ project (Adds C/C++ Nature) 菜单。
此命令正确复制了所有项目设置。然后我将main.c重命名为main.cpp,编译好了,现在可以运行了。

【讨论】:

    【解决方案3】:

    我是为 Keil IDE 做的。您应该使用更新的 HAL 驱动程序通常由 STM32CubeMX 生成一个 STM32 MDK 项目 然后在 Keil ARM MDK 中打开项目,将 project-option-C/C++ -MiscControls 更改为 --cpp 最后一步,您应该在 .hpp 和 .cpp 中创建用户 C++ 文件

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2020-05-10
      • 2019-07-06
      • 1970-01-01
      • 2021-01-13
      • 2015-10-25
      • 2015-07-01
      • 2018-05-16
      • 1970-01-01
      相关资源
      最近更新 更多