当前位置:   article > 正文

STM32 cubemx FreeRTOS c与c++混编 报错解决_stm32 c++混合编程

stm32 c++混合编程

1.问题描述:

以前的代码都是用c语言来写的,后来又接触了功能更强大的c++,就想尝试c与c++混编,通过cubemx生成。

在必要的c文件中添加 ,让其能够编译。这个代码中__cplusplus是cpp中的定义的宏,假设编译器启用的c++形式编译,这个宏就会跳进去,“extern "C" { ”说明编译器用C语言的模式编译,关于c语言的内容就放里面。

  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif

然后编译下来的结果,报了20个错。

看了一眼,报错文件都是FreeRTOS的文件,问题主要出在了 void* (无类型指针上面)上面。一个无类型指针(void*)是一种通用的指针类型,可以指向任何数据类型的地址,因此在编译时不会执行类型检查。由于无类型指针丢失了类型信息,编译器无法确定指针指向的数据类型,从而导致一些潜在的问题。但是FreeRTOS用c语言形式编译的时候,void* 是合法的,换到c++来编译就报错了,这是因为FreeRTOS是用c语言来写的,但是FreeRTOS的代码又不能改,我就不得不想其他办法了(但其实也试过使用 static_cast 但是没什么用,还报了其他错误)。

2.解决问题

既然FreeRTOS不支持C++编译,那我就不用c++去编译FreeRTOS文件不就行了吗。

 

 这里的全局没有变,关键的是多加一步。在cubemx生成的FreeRTOS文件上。

在工程目录下鼠标左键选中FreeRTOS文件组,右键单击选择Options for 'XX'

在Misc Control中加入 --c99

 再次编译。

 完成以上步骤,就可以正常在FreeRTOS中运行C++11的程序了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/684140
推荐阅读
相关标签
  

闽ICP备14008679号