打印
[STM32G4]

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

[复制链接]
358|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 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 | 只看该作者
指针操作错误,如野指针、越界访问等,可能导致任意内存位置的数据被改写。

使用特权

评论回复
5
powerantone| | 2024-9-2 20:12 | 只看该作者
如果ISR中访问了与main()中相同的变量,并且没有适当的同步机制(如禁用中断、使用互斥锁等),则ISR可能会改写这些变量的值。

使用特权

评论回复
6
stormwind123| | 2024-9-2 21:59 | 只看该作者
硬件故障,如内存损坏、电源不稳定等

使用特权

评论回复
7
probedog| | 2024-9-2 23:00 | 只看该作者
关闭或调整编译器的优化设置(如将优化级别从-O2降低到-O0)。

使用特权

评论回复
8
classroom| | 2024-9-3 16:00 | 只看该作者
编译器优化问题

使用特权

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

本版积分规则

2038

主题

7364

帖子

10

粉丝