【STM32G474】利用Cpp编写STM32代码后,Cubemx修改配置后代码报错147个error,如何处理?

问题描述

打开Cubemx,添加TIM7用于定时器精准延时,生成代码后,Keil提示有147个error。
之前是Cubemx是没有问题的,是利用Cpp编写stm32(将Keil改为Version6)后才导致Cubemx配置失败:
在这里插入图片描述
debug成功图片:
在这里插入图片描述

解决办法

打开GitTortoise,打开日志
在这里插入图片描述

对比两个版本,版本1是正确的,版本2是Cubemx刷新后的错误的,将版本1的port.c和portmacro.h文件另存为当前代码存放的文件夹即可:
在这里插入图片描述
不要把文件搞错了:
在这里插入图片描述
然后编译运行即可!

port.c和portmacro.h是什么文件?

在STM32微控制器的开发中,port.cportmacro.h 是与FreeRTOS实时操作系统(RTOS)相关的两个文件。FreeRTOS是一个开源的、可裁剪的、抢占式的实时操作系统,广泛用于嵌入式系统开发。

portmacro.h

portmacro.h 是一个宏定义文件,它包含了FreeRTOS在与硬件相关的操作中使用的宏。这些宏提供了一种抽象层,使得FreeRTOS的移植工作变得更加容易。通过定义这些宏,可以针对不同的硬件平台调整FreeRTOS的行为,而无需修改FreeRTOS的核心代码。

portmacro.h中,你可能会找到如下几种类型的宏:

  • 任务创建和删除:用于创建和删除任务的宏。
  • 互斥量操作:用于获取和释放互斥量的宏。
  • 信号量操作:用于等待和发送信号量的宏。
  • 中断管理:用于使能和禁用中断的宏。
  • 临界区管理:用于进入和退出临界区的宏,以保护共享资源。
  • 时钟管理:用于获取当前系统时间的宏。

port.c

port.c 是FreeRTOS的另一个源文件,它包含了与硬件紧密相关的代码,通常包括中断处理、上下文切换、tick计数等核心功能。

port.c中,你可能会遇到以下功能:

  • 上下文切换:实现任务切换时保存和恢复寄存器状态的代码。
  • tick处理:处理系统tick中断,通常用于更新系统时间以及检查超时的任务。
  • 中断使能/禁用:控制中断使能和禁用的代码。
  • 内存管理:管理FreeRTOS使用的内存,包括任务控制块(TCB)和堆内存。

STM32和FreeRTOS的移植

在STM32微控制器上移植FreeRTOS时,需要根据STM32的具体硬件特性来实现port.cportmacro.h中的函数和宏。例如,你可能需要实现特定的中断处理逻辑,或者为STM32的内存管理单元(MPU)配置内存保护。

通常,STM32的标准外设库或HAL库已经提供了一些与硬件操作相关的函数,这些函数可以在port.cportmacro.h中被利用,以简化移植工作。

注意事项

  • 确保在使用FreeRTOS之前,你已经阅读了FreeRTOS的官方文档,了解其工作原理和API的使用。
  • 在移植过程中,始终注意FreeRTOS对中断处理和上下文切换的要求,以避免造成系统不稳定。
  • 根据你的应用需求,可能需要对port.cportmacro.h进行适当的修改和优化。
  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值