本帖最后由 ColeYao 于 2022-4-1 11:21 编辑
使用C++代替C语言写单片机程序有很多优点,比如更节省代码空间,容易扩展,维护方便等(比如C语言写的串口部分,一个设备需要写一个单独的程序,而且收发部分函数不能重名,尽管可以拷贝后函数更名,但比起C++只是重新定义一下就可以使用来说,效率较低)。但stm32 cubeMX 带freertos默认只生成c语言项目,如果要改成C++项目,可以参考以下过程:
1、使用stm32 CubeMX软件生成带FreeRTOS的IAR for ARM8.32.1版本c语言版本的项目,并使用IAR for ARM8.32.1 ReBuild All
编译通过;
2、在IAR for ARM8.32.1中将C/C++ Compiler中的Language 1选项页面中的Language选项由C改为C++,重新编译后可以看到很多
编译错误,例如:Error[Pe513]: a value of type "void *" cannot be assigned to an entity of type "TaskStatus_t *"
F:\..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c 709
3、双击定位到错误代码出:task = pvPortMalloc (count * sizeof(TaskStatus_t)); 将其添加强制类型转换后改为
task =(TaskStatus_t *) pvPortMalloc (count * sizeof(TaskStatus_t)); 其它错误同样处理
第一次需逐个错误修改,后面再有类似项目只需将之前改过的FreeRTOS目录拷贝到新项目处覆盖原FreeRTOS目录即可(附件为修改过的FreeRTOS源文件目录和一个主程序源文件Demo)
4、在Core目录中的Src目录中找到main.c文件,更名为main.cpp文件
5、在项目中Core工作组中移除main.c,重新添加main.cpp文件,然后ReBuild All.
如附图所示,当步进电机Cpp驱动文件写好后,使用时只需要定义一个步进电机变量和接口变量即可(可以合并,这样写是因为之前调试步进电机驱动板遗留下来的风格)
|