
按图索骥--GHS环境下瑞萨RH850芯片定位程序跑飞原因的方法
由于Ghs不像劳特巴赫那样能精准的记录上下文,所以面对这种没有上下文的unused_isr,线索太少,如大海捞针,很难定位错误原因!本文试图探讨一种在MULTI/GHS编译环境下定位瑞萨RH850系列芯片程序跑飞进入异常中断后的一种通用方法。
·
错误现象如上图。
由于Ghs不像劳特巴赫那样能精准的记录上下文,所以面对这种没有上下文的unused_isr,线索太少,如大海捞针,很难定位错误原因!
首先,查出导致进入该_unused_isr的上文,有2个方法:
方法一,改造启动文件,在启动文件中每一个jr __unused_isr的前面记一个数存入r6内核寄存器,作为判断标识---注意打断点的方法在此时是无效的,因为跑飞入口太多,断点不够用!
方法二,查看内核寄存器EIIC和FEIC值,然后查表。
如果是EI故障,则参考RH850 U2A HDUM Rev.1.20的附件表格《Interrupt_table.xlsx》
结合图表可知,本次故障是MAE内存对齐错误。
然后,查看通用寄存器的EIPC和FEPC的值,FEPC对应函数为rfd_fv0_SingleWrite(),在该函数执行时候产生了MAE故障。
再次,查看MEA寄存器的值,可在Map文件中找到这个MEA值对应变量/函数。本次重点查看MEA的值,它在map文件中对应:
该Hal_FlsSrcBuffer为U8类型,将其改为u32类型,则故障消失。
更多推荐
所有评论(0)