瑞萨Synergy R7FS5D97E启动时MRS指令触发HardFault问题求助
HardFault异常(未定义指令)在瑞萨Synergy R7FS5D97E Cortex-M4上的排查与解决
问题现象
在瑞萨Synergy R7FS5D97E(Cortex-M4)评估板运行简单C测试代码,已基于官方资料完成示例项目、SDK及工具链搭建,通过Ozone调试器成功构建并烧录程序,但启动时触发HardFault异常,提示未定义指令,异常发生在R_BSP_RegisterProtectEnable函数执行MRS R1, PRIMASK指令时。
排查过程
- 该
MRS指令此前已成功执行约15次,排除硬件不支持的可能性 - 追踪调用链:
SystemInit(system_S5D9.c:171)→bsp_clock_init(bsp_clocks.c:150)→R_CGC_SystemClockSet(r_cgc.c:707)→r_cgc_system_dividers_set(r_cgc.c:2637),异常触发于该调用链中对R_BSP_RegisterProtectEnable/HW_CGC_HardwareLock的调用 - 初步怀疑时钟配置问题(Ozone使用板卡默认设置),也考虑过手动搭建Conan+CMake项目时遗漏配置,但
MRS指令仅为特殊寄存器值复制到通用寄存器,故障逻辑上不符合常理;此前在其他瑞萨Synergy板卡完成类似开发未遇此问题 - 补充信息:异常出现在设置ICLK分频器和时钟源的分支中,此前调用
R_BSP_RegisterProtectEnable时该指令执行正常,因此更倾向时钟配置问题,但初期不敢随意修改官方提供的代码
解决方法
修改bsp_clock_cfg.h中的内部时钟分频设置,将分频比从/1改为/2后,问题彻底解决。
原因分析
bsp_clock_cfg.h通常由瑞萨软件从XML配置自动生成,本次手动创建该文件时出现错误,分频比设置错误导致Flash指令预取与解码不同步,最终触发HardFault异常。
内容的提问来源于stack exchange,提问作者Xellos
相关产品推荐
相关产品推荐

