嵌入式中主动触发hardfault

这篇博客探讨了在嵌入式产品开发中如何主动引发硬故障,例如通过空指针写入数据或非对齐访问,以测试系统的异常处理能力。通过示例代码,作者展示了如何触发hardfault,并解释了这样做的目的,如检查看门狗功能、设备复位机制以及故障信息的丰富程度。
摘要由CSDN通过智能技术生成

       通常在嵌入式产品的开发过程中,我们需要和各种死机的现场打交道,分析pc指针,backtrace等;但是有的时候呢,我们也需要在程序中在适当的时机来主动发生crash,比如主动触发hardfault,以此来验证某些功能是否完善.诸如,看门狗是否好用? hardfault后设备能否成功复位? 或者hardfault后dump出来的信息是否足够丰富等等.

如下是一个通过向空指针来写数据来主动产生hardfault的示例:

+        if (msg->id == 0x2002) {
+            dbg(D_INF D_KE "%s A passive hardfault is created on msg 2002!\n", __func__);
+            unsigned int *hardfault = NULL;
+            *(volatile unsigned int *)hardfault = 0x1234;
+        }

应该也可以通过如下的程序来产生一个非对齐访问的异常(0x60000123不是一个4字节对齐的地址,在嵌入式32位机中往往会出异常):

+        if (msg->id == 0x2002) {
+            dbg(D_INF D_KE "%s A passive hardfault is created on msg 2002!\n", __func__);
+            unsigned int *hardfault = 0x60000123;
+            *(volatile unsigned int *)hardfault = 0x1234;
+        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值