嵌入式中主动触发hardfault
? ? ? ?通常在嵌入式產(chǎn)品的開發(fā)過程中,我們需要和各種死機(jī)的現(xiàn)場(chǎng)打交道,分析pc指針,backtrace等;但是有的時(shí)候呢,我們也需要在程序中在適當(dāng)?shù)臅r(shí)機(jī)來主動(dòng)發(fā)生crash,比如主動(dòng)觸發(fā)hardfault,以此來驗(yàn)證某些功能是否完善.諸如,看門狗是否好用? hardfault后設(shè)備能否成功復(fù)位??或者h(yuǎn)ardfault后dump出來的信息是否足夠豐富等等.
如下是一個(gè)通過向空指針來寫數(shù)據(jù)來主動(dòng)產(chǎn)生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;
+ ? ? ? ?}
應(yīng)該也可以通過如下的程序來產(chǎn)生一個(gè)非對(duì)齊訪問的異常(0x60000123不是一個(gè)4字節(jié)對(duì)齊的地址,在嵌入式32位機(jī)中往往會(huì)出異常):
+ ? ? ? ?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;
+ ? ? ? ?}
總結(jié)
以上是生活随笔為你收集整理的嵌入式中主动触发hardfault的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位ARM Hard Fault 的方法
- 下一篇: BLE Mesh(1)—— 简述