RiseV CPU/CH32V307的hardfault分析

这块文章还比较少,但是用了RiseV一定会用到,目前比较有效的信息如下:


可在HardFault函数中将以下3个状态寄存器的值打印看一下。mepc、mcause、mtval均为CSR寄存器,其中,

mepc寄存器值为当前遇到异常时的指令 PC 值,或中断前下一条预执行的指令 PC 值,退出异常或中断后微处理器的返回地址保存在mepc中。

mcause寄存器值为当前异常种类或中断编号值,可以通过该值查看引起异常的原因或判断中断的来源。

mtval寄存器值主要反映引起当前异常的存储器访问地址或指令编码,当进入异常和中断时,硬件将自动更新mtval的值。

关于这三个CSR寄存器的具体介绍,可参考我们QingKeV4微处理器手册,手册下载链接如下:
http://www.wch.cn/downloads/QingKeV4_Processor_Manual_PDF.html
同时为避免不必要错误LD文件里和下载配置里的FLASH和RAM大小分配要一致。


LYJ博客

其中,mcause在手册定义如下:

LYJ博客


假如mcause=00000004,那么就是Load address misaligned,即数据对齐问题导致hardfault。

如果mepc=000072D6,查看map文件:


LYJ博客


那么极有可能是在ETH_IROHandler中产生的这种异常。

本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2023 labisart.com 版权所有 | 联系:labartwork@163.com