打印
[STM32F2]

STM32代码中某个变量值自动改变

[复制链接]
1501|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
远芳侵古道|  楼主 | 2024-6-30 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32开发中时,代码中的某个变量 突然自动变化,博主遇到过是一个结构体的一个变量数值自动改变(PS:这个可以通过debug分析出来)。
   分析与解决: 可能是内存溢出的问题,即内部的代码复杂,定义的变量(尤其是静态变量过多),导致内存溢出;建议在使用该变量前重新赋值,或者减少静态变量的定义(推荐后一种)。

使用特权

评论回复
沙发
稳稳の幸福| | 2024-6-30 18:21 | 只看该作者
一般不操作不会改变,除非跑飞了。可以考虑用看门狗复位。

使用特权

评论回复
板凳
suncat0504| | 2024-6-30 22:41 | 只看该作者
感觉是处理代码的问题。结构体往往多个变量汇集,尤其是有指针、数组类型的成员时,操作上非常容易发生越界改变。

使用特权

评论回复
地板
菜鸟的第一步| | 2024-7-10 15:58 | 只看该作者
一般不会自动改变的吧,

使用特权

评论回复
5
hehhehee| | 2024-7-26 14:46 | 只看该作者
减少静态变量:尽量减少静态变量的定义,以释放内存。
重新赋值变量:在使用变量前重新赋值,确保其值正确。

使用特权

评论回复
6
公羊子丹| | 2025-2-9 09:11 | 只看该作者
这种问题确实头疼,我之前遇到过是数组越界导致的变量异常变化,你有检查过相关代码吗?

使用特权

评论回复
7
周半梅| | 2025-2-9 09:12 | 只看该作者
有没有可能是DMA直接写内存导致变量被意外修改?可以排查一下DMA配置。

使用特权

评论回复
8
帛灿灿| | 2025-2-9 09:13 | 只看该作者
建议打开编译器的栈溢出检测选项,看看是否有栈空间不足的情况。

使用特权

评论回复
9
童雨竹| | 2025-2-9 09:14 | 只看该作者
你试过用volatile关键字修饰变量吗?有时候编译器优化也会带来变量值异常的问题。

使用特权

评论回复
10
万图| | 2025-2-9 09:15 | 只看该作者
看看是不是中断函数修改了这个变量,可能需要加锁保护。

使用特权

评论回复
11
Wordsworth| | 2025-2-9 09:16 | 只看该作者
我一般遇到这种问题会先查找全局变量的访问路径,看看是否有未预料到的赋值。

使用特权

评论回复
12
Bblythe| | 2025-2-9 09:17 | 只看该作者
你可以试试在变量前后插入特定标记数据,检测是否有内存非法写入。

使用特权

评论回复
13
Pulitzer| | 2025-2-9 09:19 | 只看该作者
如果是复杂结构体,可以考虑分离出关键变量,减少误修改的风险。

使用特权

评论回复
14
Uriah| | 2025-2-9 09:20 | 只看该作者
建议用watchpoint功能设置数据断点,这样能精确捕获变量变化的位置。

使用特权

评论回复
15
Clyde011| | 2025-2-9 09:21 | 只看该作者
有没有可能是因为栈和堆空间重叠导致的?可以调整链接脚本里的内存分配策略试试。

使用特权

评论回复
16
中国龙芯CDX| | 2025-2-9 14:22 | 只看该作者
变量值自动改变?地址的问题还是覆盖了?

使用特权

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

本版积分规则

83

主题

849

帖子

0

粉丝