通常在嵌入式产品的开发过程中,我们需要和各种死机的现场打交道,分析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;
+ }