[资料] 【经验分享】CW10.x编译环境查找HardFault异常原因
606 查看
0 回复
 楼主 | 发布于 2020-10-19 | 只看楼主
分享到:
已经遇到很多客户反映:CodeWarrior10.x编译环境调试Processor Expert软件生成的Kinetis芯片程序时经常会进入PE_ISR(Cpu_Interrupt) PE_DEBUGHALT中断,但仅从这个中断服务函数名上又无法辨别到底是什么原因导致的。参考以往问题反馈和同事Erich Styger的博文Debugging Hard Faults on ARM Cortex-M并经过几番尝试之后发现这往往是芯片由于各种原因导致的Hard Fault异常中断。在此与大家分享一下使用 CodeWarrior10.6编译环境调试PE生成的程序时,查找Hard Fault异常中断原因的方法。

此处简略介绍文档内容:
一、CodeWarrior10.x编译环境背景知识


二、Cortex M0+内核异常中断背景知识


三、人工查找HardFault异常原因
借鉴ARM官网专为Keil MDK编译环境提供的应用手册apnt209里提到的方法,在CodeWarrior10.x编译环境里展示:通过查看进入异常中断函数后的LR值来观察被栈入Main Stack 或 Process Stack的进入异常前的R0-R3,R12, LR, PC,PSR寄存器值。被栈入的LR链接寄存器存储着进入异常前调用的子程序地址信息,被栈入的返回地址PC寄存器存储着进入异常前将执行的那条代码。



四、程序查找HardFault异常原因
使用汇编代码在异常中断函数里将引起Hard Fault的代码地址或子程序地址存入R1寄存器以便大家观察。

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部