[STM32H7] STM32H743对关键中断函数,使用ITCM搬至RAM运行,仿真进入HardFault_Handler报错

[复制链接]
 楼主| jcky001 发表于 2025-1-15 16:00 | 显示全部楼层 |阅读模式
STM32H743对关键中断函数,使用ITCM搬至RAM运行,STM32CubeIDE仿真进入HardFault_Handler报错。其中,ITCM已查找网上多篇教程,修改了ld链接文件,CubeIDE编译能正常通过,且map文件中,对已搬至ITCM RAM区域运行的中断函数的地址是OK的。只要上电一仿真运行就会进入HardFault_Handler函数,MCU主频是480MHz,不知是否主频过高所致,请各位大神指点下。
哈根达斯uz 发表于 2025-1-15 22:14 来自手机 | 显示全部楼层
其中,ITCM已查找网上多篇教程,修改了ld链接文件,CubeIDE编译能正常通过
flycamelaaa 发表于 2025-1-17 12:01 | 显示全部楼层
检查内存配置
powerantone 发表于 2025-1-17 13:00 | 显示全部楼层
当改变ISR的位置时,必须更新中断向量表,使其指向新的ISR地址。
stormwind123 发表于 2025-1-17 16:00 | 显示全部楼层
检查ISR中是否有堆栈溢出或越界访问的问题
probedog 发表于 2025-1-17 19:00 | 显示全部楼层
检查是否有任何仿真配置错误或不一致。
classroom 发表于 2025-1-17 21:00 | 显示全部楼层
关闭编译器优化选项设置
Amazingxixixi 发表于 2025-1-21 17:18 | 显示全部楼层
学习一下啊,还有好多需要学习的。
SophiaOP 发表于 2025-1-22 21:42 来自手机 | 显示全部楼层
链接文件怎么改啊
公羊子丹 发表于 2025-1-23 10:24 | 显示全部楼层
ITCM这块我也踩过坑,首先确认你搬到ITCM的函数有没有启用 attribute((section(".itcmram"))) 这种方式标记。
周半梅 发表于 2025-1-23 10:25 | 显示全部楼层
主频480MHz应该没问题,STM32H743本来就是支持这个频率的,问题大概率还是内存映射上。
帛灿灿 发表于 2025-1-23 10:27 | 显示全部楼层
你在 HardFault_Handler 里用栈回溯看一下出错的具体地址,有时候能直接定位问题。
童雨竹 发表于 2025-1-23 10:29 | 显示全部楼层
ITCM要启用Cache,你确认初始化代码里有开Cache吗?否则访问会有问题。
万图 发表于 2025-1-23 10:30 | 显示全部楼层
修改链接文件后最好检查下编译生成的.map文件,看看那些函数的地址是否真落在ITCM区域。
Wordsworth 发表于 2025-1-23 10:31 | 显示全部楼层
仿真的时候进入HardFault,有可能是访问了非法地址,检查一下中断函数里的指针操作有没有越界。
Bblythe 发表于 2025-1-23 10:33 | 显示全部楼层
我记得H7系列要手动使能AXI到ITCM的映射功能,你看看RCC和SYSCFG的配置有没有问题。
Pulitzer 发表于 2025-1-23 10:34 | 显示全部楼层
再检查一下中断优先级配置,H7的中断优先级分组和F4系列不一样,可能是优先级冲突了。
Uriah 发表于 2025-1-23 10:35 | 显示全部楼层
尝试降低优化级别(比如O0),有时候高优化会导致ITCM搬移的函数出问题。
Clyde011 发表于 2025-1-23 10:36 | 显示全部楼层
如果上面都没问题,建议用Debug模式一步步跟踪,看看是从哪一步开始跑偏到HardFault的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1636

主题

5575

帖子

6

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