上一篇介绍了如何在stm32上裸机使用c++开发,这一篇我们介绍如何进一步使FreeRTOS兼容C++,以及通过CubeMX使FreeRTOS兼容到AC6的编译器

目录

FreeRTOS兼容C++

FreeRTOS兼容AC6


FreeRTOS兼容C++

使用freeRTOS兼容c++时,cubemx的任务配置就不能是as_weak,是as_external

如果你是标准库,自己手动创建任务,那么改都不用改做好C++的兼容就好了。

你可以使用《c++开发stm32f系列 1》的方法创建接口函数在freertos运行,或者使用我提供得方案《C++抽象化封装FreeRTOS,一种多人并行开发方案1》,如果是裸机开发,推荐前者,如果是FreeRTOS则推荐后者。

如此,FreeRTOS兼容C++就完成了。如果你想使用AC6的话,还需要做额外修改。

FreeRTOS兼容AC6

CubeMX生成的FreeRTOS默认适配AC5版本,在Keil中修改到AC6版本直接运行的话会报错。

AC6版本的keil编译器引入了大量gcc功能,对c++的兼容进一步提高到c++17。我们需要修改FreeRTOS的port.c文件,在CubeMX中找到FreeRTOS固件库的位置,打开CubeMX的Project Manager ,找到固件库位置,打开文件夹。

在这个路径下,打开\Middlewares\Third_Party\FreeRTOS\Source\portable,你会发现有GCC和RVDS两个文件夹,里面存放在Cotex不同系列的FrrrRTOS的port.c文件,比如f103是M3内核,f407是M4内核。

例如f103,将GCC/ARM_CM3复制粘贴到RVDS/ARM_CM3,完成覆盖,这样CubeMX生成的FreeRTOS对应的内核版本ARM_CM3就是适配AC6版本了。不过记得备份RVDS哦,万一要用回去呢。

如果此文章有帮助到你,记得点赞哟。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐