[STM32G4] STM32G474 mian()函数中变量被异常改写的问题

[复制链接]
 楼主| 两只袜子 发表于 2024-9-2 15:33 | 显示全部楼层 |阅读模式
问题描述:创建一个最基本的工程(STM32G474),只配置时钟和GPIO(作为debug pin),代码如下:


#include "main.h"
#include "gpio.h"

uint16_t u16Debug = 10;

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();

while (1)
{
if (u16Debug == 59390)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
}
}
}

程序将u16Debug初始化为10,但通过debug pin会发现,程序运行一会后(4ms--5ms),u16Debug被改写为59390,不知是何原因?

目前我的几个发现是1.只有第一个变量会被改写,例如在u16Debug之后再定义一个变量u16Debug2,u16Debug2是不会被改写的;2.代码下载到MCU flash后,MCU自动运行,必然复现该问题。但如果通按开发板上的reset按钮重新复位MCU或者通过keil的debug功能单步执行,则不会出现该问题。
classroom 发表于 2024-9-2 16:08 | 显示全部楼层
堆栈溢出吧
laocuo1142 发表于 2024-9-2 19:23 | 显示全部楼层
减少局部变量的数量或大小。
使用全局变量或静态变量代替局部变量
flycamelaaa 发表于 2024-9-2 19:23 | 显示全部楼层
指针操作错误,如野指针、越界访问等,可能导致任意内存位置的数据被改写。
powerantone 发表于 2024-9-2 20:12 | 显示全部楼层
如果ISR中访问了与main()中相同的变量,并且没有适当的同步机制(如禁用中断、使用互斥锁等),则ISR可能会改写这些变量的值。
stormwind123 发表于 2024-9-2 21:59 | 显示全部楼层
硬件故障,如内存损坏、电源不稳定等
probedog 发表于 2024-9-2 23:00 | 显示全部楼层
关闭或调整编译器的优化设置(如将优化级别从-O2降低到-O0)。
classroom 发表于 2024-9-3 16:00 | 显示全部楼层
编译器优化问题
v26g7l 发表于 2024-12-31 19:23 | 显示全部楼层
变量被设置在未完全初始化的内存位置。
地瓜patch 发表于 2024-12-31 20:32 来自手机 | 显示全部楼层
仿真时跳到硬件错误么
OKAKAKO 发表于 2024-12-31 21:18 | 显示全部楼层
函数中变量被异常改写的原因是不是超限了
LOVEEVER 发表于 2024-12-31 23:17 | 显示全部楼层
变量被异常改写为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2122

主题

8117

帖子

11

粉丝

2122

主题

8117

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部