CUBEMX与FreeRTOS在Arm Compiler 6下的配置方法

在嵌入式开发中,STM32是一种广泛使用的微控制器。为了提高开发效率,我们通常会利用ST公司提供的STM32CubeMX工具来配置硬件,并结合FreeRTOS这一实时操作系统来进行多任务处理。本文将深入探讨如何在这一框架下,使用Arm Compiler 6(AC6)编译器进行项目的编译和构建。

初识CUBEMX与FreeRTOS

STM32CubeMX是一个图形化的配置工具,它可以帮助开发者快速配置STM32微控制器的各种硬件特性,如时钟树、外设初始化等,并生成相应的初始化代码。而FreeRTOS是一个小型、开源的实时操作系统,适用于微控制器,能有效管理多个任务。

为何选择Arm Compiler 6

Arm Compiler 6(AC6)是基于Clang和LLVM技术的编译器,它提供了现代的优化技术、C++11/14支持以及更好的错误消息。相比于传统的ARM Compiler 5(AC5),AC6提供了更高的代码效率和更小的代码体积。

配置步骤解析

  1. **生成基础代码:** 使用STM32CubeMX配置所需的硬件特性和中间件,如FreeRTOS,并生成基础代码。

  2. **选择编译器:** 在项目设置中选择AC6作为编译器。这可能需要在IDE(如Keil MDK)中进行配置。

  3. **修改FreeRTOS配置:** 由于FreeRTOS的默认配置可能是为AC5或GCC编译器准备的,因此需要调整以适应AC6。具体而言,需要替换一些文件和定义一些宏。

  • 替换文件:将CubeMX数据库中的 `Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F` 中的文件替换为 `Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F` 中的文件。

  • 添加宏定义:例如添加 -D__weak="attribute((weak))" 和 -D__packed="attribute((packed))" 。

具体地址由个人安装路径确定,比如将:

X:\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F 下的文件

复制并替换到

X:\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F

注意 所有 ...\portable\GCC\ARM_CM4F 下的文件都是一样的

  1. **编译与调试:** 在IDE中进行编译,如果出现错误,检查是否所有的配置都已正确设置,包括文件路径、宏定义等。

  2. **优化与调整:** 根据项目需求,可能需要进一步调整代码和配置,以优化性能或适应特定的应用场景。

结语

通过正确配置CUBEMX和FreeRTOS在AC6编译器下的工作环境,开发者可以充分利用AC6的现代特性,提升代码的效率和质量。虽然初始配置可能需要一些时间和精力,但长远来看,这将大大提高开发效率和产品的可靠性。

相关推荐
yutian06064 天前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
whik119412 天前
Keil-MDK开发环境编译后axf自动转换bin格式文件
stm32·arm·keil·axi·bin·mdk
Krysdon13 天前
Freertos任务切换
stm32·freertos
ShiinaKaze19 天前
【Keil】Keil MDK 已经不再提供 ARM Compiler v5
keil·arm compiler·mdk
李解4925 天前
裸机和跑系统差异的无脑问题
c语言·数据库·freertos
沅_Yuan25 天前
蓝桥杯嵌入式入门指南-RTC【8】
蓝桥杯·嵌入式·keil·rtc·cubmx
沅_Yuan1 个月前
蓝桥杯嵌入式入门指南-UART【7】
蓝桥杯·嵌入式·uart·keil·cubmx
淡忘的江南1 个月前
《FreeRTOS任务删除篇》
freertos·dsp开发
likkoliu1 个月前
FreeRTOS LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 存在的意义以及高于它的中断不能调用 safe freertos api
freertos·中断·safe freertos api·library_max_syscall_interrupt_priority
@@庆1 个月前
任务中断的两套API函数(改进FormISR的实时性)资源管理_互斥操作的本质(解决DH11经常出错的问题)
arm开发·stm32·单片机·嵌入式硬件·freertos