SophiaOP 发表于 2025-4-20 16:47

栈没溢出的情况下为啥还是会死机

灵动MM32F系列频繁死机,断电重启才能恢复!调试发现堆栈溢出但实际用量未超,有没有人遇到过类似玄学问题?开发环境是KEIL5,已排除代码逻辑错误。

xuanhuanzi 发表于 2025-4-23 15:49

在程序分段做标记,记录死机出现的位置,想法锁定死机位置,看看是相同的位置还是随机位置。可以用printf打印位置标记

xuanhuanzi 发表于 2025-4-23 16:06

电源与复位电路问题
现象
断电重启才能恢复,可能与电源噪声或复位电路不稳定有关。

排查方法
电源监控:

用示波器观察MCU的VDD和VSS引脚在死机瞬间是否有电压跌落或毛刺。

检查复位引脚(NRST)是否因干扰触发意外复位。

看门狗配置:

确认是否启用独立看门狗(IWDG)但未及时喂狗。

检查窗口看门狗(WWDG)的窗口时间配置是否合理。

解决方案
在VDD附近增加10-100μF电解电容和0.1μF陶瓷电容。

在NRST引脚增加0.1μF电容到地,抑制干扰。

若使用看门狗,添加喂狗日志或调试断点确认喂狗逻辑。

申小林一号 发表于 2025-4-24 18:36

学习一下

两只袜子 发表于 2025-4-28 12:09

若同时启用复杂外设,可能导致堆栈与全局变量、堆内存竞争。

jcky001 发表于 2025-4-28 12:10

临时禁用非关键外设,观察是否仍有死机现象。

cr315 发表于 2025-4-28 12:11

中断优先级配置不当?

elephant00 发表于 2025-4-28 12:11

检查中断优先级,避免高优先级中断长时间占用堆栈。

flycamelaaa 发表于 2025-4-28 12:13

试着降低优化级别。

duo点 发表于 2025-4-28 12:16

禁用所有外设,仅保留基本时钟和GPIO,观察是否仍有死机现象。

laocuo1142 发表于 2025-4-28 16:00

建议在链接脚本中为中断单独分配堆栈,避免与主堆栈竞争。

powerantone 发表于 2025-4-28 18:03

检查硬件复位源是否被误触发。

stormwind123 发表于 2025-4-28 20:00

看门狗复位。

classroom 发表于 2025-4-28 20:30

升级J-Link或ULINK的固件至最新版本。

probedog 发表于 2025-4-28 21:00

电源噪声、晶振不稳定或PCB走线阻抗过高,可能导致MCU运行异常,间接引发堆栈溢出。
页: [1]
查看完整版本: 栈没溢出的情况下为啥还是会死机