打印
[STM32F4]

带FreeRTOS的stm32_IAR8.31项目c语言改Cpp过程

[复制链接]
370|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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驱动文件写好后,使用时只需要定义一个步进电机变量和接口变量即可(可以合并,这样写是因为之前调试步进电机驱动板遗留下来的风格)

main_CPPwithFreeRTOS.png (26.64 KB )

main_CPPwithFreeRTOS.png

FreeRTOS_Cpp_IAR831.rar

295.99 KB

main_CPP.rar

6.98 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

355

帖子

5

粉丝