Hard Fault;程序死机问题

硬件方面原因:

  1. 电源设计有错误,造成供电不稳;
  2. 电源质量不好,纹波噪声过大;
  3. 器件接触不良;
  4. 对于带有Vcap 引脚器件,管脚处理不当;
  5. 电路中有强力干扰源,对器件造成干扰。

软件方面常见原因

  1. 使用空指针;
  2. 内存的非对齐访问;
  3. 数组越界;
  4. 访问已经释放的内存空间;
  5. 除数为零;

基于栈回溯分析Hard Fault问题

每个寄存器对应四个字节/

程序执行的时候函数栈包含:触发进入或者中断进入Hard Fault的内存栈,调用函数内存栈,通过这些,可以找到在发生中断瞬间导致触发进入Hard Fault中断的代码指令地址;还有这个函数的返回地址,通过这些可以定位到导致异常的代码地址;和调用关系:

调试除数为零导致程序死机

打开J-Link所在文件选择

放在j-link   flash里面打开bin文件

3C0:8个字节后面是LR寄存器内容

3E0:后8个字节是PC寄存器内容

调试空指针导致的死机问题

第一步:打开J-Link Commander

PC:PC寄存器指向当前CPU执行代码对应的指令

SP:指向保存R0内容的内存地址

第二步:在J-Link Flash中打开bin文件

6E0:八个字节后:是LR寄存器的内容

700:后八个字节:是PC寄存器内容(PC正常是08开始,而上图显示00:很明显是空指针的现象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值