[STM32G0] STM32G0 中断中的变量 Memory Fault/HardFault

[复制链接]
1496|15
 楼主| 小库里 发表于 2025-5-25 23:04 | 显示全部楼层 |阅读模式
用 STM32Cube IDE开发STM32G071在 Scanning Mode 上作 7 段 。
每 20 毫秒还在比较器中断内递减计数器值 。
1) 有时程序会因 Hard Fault 而挂起,
2)中断内发生 Memory Fault/HardFault。


stormwind123 发表于 2025-5-26 12:28 | 显示全部楼层
内存访问未对齐?
probedog 发表于 2025-5-26 12:29 | 显示全部楼层
可能是因为堆栈溢出吧!
classroom 发表于 2025-5-26 12:30 | 显示全部楼层
非法地址访问,指针未初始化或野指针?
flycamelaaa 发表于 2025-5-26 18:20 | 显示全部楼层
总线错误或者是中断时序冲突吧。。
powerantone 发表于 2025-5-26 19:30 | 显示全部楼层
禁用中断保护。
公羊子丹 发表于 2025-5-27 07:40 | 显示全部楼层
会不会是中断里访问了未初始化的指针或非法内存?建议用 __attribute__((section(".noinit"))) 保持变量有效。
周半梅 发表于 2025-5-27 07:41 | 显示全部楼层
建议检查变量是不是在 ISR 中被频繁访问导致栈溢出?尤其是局部变量。
帛灿灿 发表于 2025-5-27 07:42 | 显示全部楼层
你中断里有用到数组或者指针操作吗?HardFault 很容易是越界访问造成的。
童雨竹 发表于 2025-5-27 07:42 | 显示全部楼层
试试看把中断中用的变量声明成 volatile 的,防止编译器优化出问题。
万图 发表于 2025-5-27 07:43 | 显示全部楼层
我之前遇到类似的问题,最后发现是主循环和中断同时修改一个变量没加保护,试试关中断或加 __disable_irq()。
Wordsworth 发表于 2025-5-27 07:44 | 显示全部楼层
STM32G0 RAM 比较小,如果你在中断里递归或用了太多临时变量,很容易爆栈。
Bblythe 发表于 2025-5-27 07:45 | 显示全部楼层
中断时间是不是太频繁了?20ms 本身不快,但嵌套中断或处理太重也会触发异常。
Pulitzer 发表于 2025-5-27 07:45 | 显示全部楼层
建议在 HardFault_Handler 里 dump 一下栈看看触发的位置,CubeIDE 支持。
Uriah 发表于 2025-5-27 07:46 | 显示全部楼层
可以试试 ST 提供的 HardFault 分析工具,看看是哪个地址访问非法。
Clyde011 发表于 2025-5-27 07:47 | 显示全部楼层
我有一次是 HAL 库中用了 HAL_Delay 在中断里,结果直接挂,建议中断别用阻塞函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

56

帖子

0

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