嵌入式中主动触发hardfault
? ? ? ?通常在嵌入式產品的開發過程中,我們需要和各種死機的現場打交道,分析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;
+ ? ? ? ?}
總結
以上是生活随笔為你收集整理的嵌入式中主动触发hardfault的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位ARM Hard Fault 的方法
- 下一篇: BLE Mesh(1)—— 简述