資料介紹
作者:dogsun88
一、進入異常之前處理器可能的狀態(tài)有:
1、 handler
2、 線程,MSP
3、 線程,PSP
二、產(chǎn)生異常時:
1、 有一個壓棧的過程,產(chǎn)生異常時使用PSP,就壓入到PSP中,產(chǎn)生異常時使用MSP,就壓入到MSP中
2、 會根據(jù)處理器的模式和使用的堆棧,設(shè)置LR的值(當(dāng)然設(shè)置完的LR的值再壓棧)
三、異常返回時:
根據(jù)LR的值,判讀使用那個堆棧,然后再從相應(yīng)的堆棧中POP數(shù)據(jù)到寄存器。
舉例說明:
在利用OSStartHighRdy->OSPendSV->OSPendSV_nosave啟動第一個線程時,在異常進入的時候,壓棧到MSP(不會影響PSP的內(nèi)容),在通過BX LR指令從異常返回之前,有一句ORR LR, LR, #0x04來設(shè)置LR的值,保證我們從異常返回時是從PSP中POP數(shù)據(jù)到寄存器里,而此時PSP的值是OSTCBHighRdy->OSTCBStkPtr,即任務(wù)創(chuàng)建時定義的堆棧數(shù)組,同時在OSTaskStkInit函數(shù)中對該任務(wù)數(shù)組初始化時,要保證其組織結(jié)構(gòu)和異常產(chǎn)生時處理器自動壓棧產(chǎn)生的棧的結(jié)構(gòu)相同。
四、棧中的內(nèi)容分析:
1、 變量
2、 調(diào)用函數(shù)時,如果子函數(shù)比較復(fù)雜,會由編譯器自動的壓入r4-r11, lr(壓入多少寄存器,由子函數(shù)的復(fù)雜程度決定的)
3、 異常保存,壓入棧的是r0-r3,r12,LR,PC,xSPR(硬件直接完成的)
4、 進程切換,所有寄存器全部壓棧
由于異常死機了之后的具體操作:
產(chǎn)生異常時,兩個值我們需要,一個是pc,一個是LR,通過LR找到棧, 再通過棧找到pc
1、 如果LR=0xFFFFFFF9說明產(chǎn)生異常的時候使用的是MSP,我們只需要讀出當(dāng)前sp的值,
sp += 0x1c;讀出的內(nèi)容就是產(chǎn)生異常時壓入棧的PC的值,這個值跟反匯編代碼對比,就能得到具體哪句話產(chǎn)生的異常。
2、 如果LR=0xFFFFFFFD明產(chǎn)生異常的時候使用的是PSP,我們需要讀出PSP的值,不要直接來讀sp的值,在keil集成開發(fā)環(huán)境中,調(diào)試時寄存器窗口有個Banked選項,會給出當(dāng)前PSP的值,當(dāng)然也可以在異常處理中加入兩句話:
MRS R0,PSP
PUSH {R0}
我們就能在當(dāng)前MSP中得到,我們PSP的值了,之后操作和上面一樣,psp+=0x1c;讀出的內(nèi)容就是產(chǎn)生異常時壓入棧的PC的值,這個值跟反匯編代碼對比,就能得到具體哪句話產(chǎn)生的異常。
文章來源:(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- Cortex-M3處理器內(nèi)核與基于Cortex-M3的MCU關(guān)系
- Cortex-M3工作模式、異常與中斷介紹資料下載
- ARM Cortex-M3 MCU 的 I2C DMA操作和中斷資料下載
- Cortex-M3與Cortex-M4對比資料下載
- Cortex-M3和Cortex-M4 Fault異常應(yīng)用之基礎(chǔ)知識資料下載
- Cortex-M3的異常和中斷資料下載
- 《ARM Cortex-M3權(quán)威指南》筆記資料下載
- ARM Cortex-M3/M4微控制器最大效率設(shè)計三秘訣資料下載
- ARM Cortex-M3系列GPIO口介紹資料下載
- ARM Cortex-M3內(nèi)核微控制器與ARM7的區(qū)別資料下載
- Cortex-M3(M0)匯編-啟動代碼分析資料下載
- Cortex-M3 NVIC與中斷控制資料下載
- Cortex-M3內(nèi)核的ARM處理器的應(yīng)用資料說明 4次下載
- Cortex-M3的入門學(xué)習(xí)資料說明
- ARM Cortex-M3權(quán)威指南 48次下載
- 如何使用Ozone分析Cortex-M異常 853次閱讀
- 強大的Arm? Cortex?-M3內(nèi)核(下) 1285次閱讀
- Cortex-M3中斷優(yōu)先級的相關(guān)知識 2797次閱讀
- 分析ARM Cortex-M內(nèi)核復(fù)位啟動過程 2477次閱讀
- 美信cortex-m3內(nèi)核芯片的啟動過程及連接文件介紹 1607次閱讀
- 基于FPGA搭建ARM Cortex-M3 SoC軟核 2634次閱讀
- 如何定制一顆ARM Cortex-M3 SoC軟核 2292次閱讀
- 米爾科技ARM Cortex-M3教程指南 2872次閱讀
- 米爾科技NXP LPC1857 LPC1850 Cortex-M3開發(fā)板概述 4396次閱讀
- Cortex-M3處理器中斷和FreeRTOS中斷優(yōu)先級配置 7136次閱讀
- STM32的Cortex-M3中斷異常處理 8313次閱讀
- 基于ARM處理器的高效異常處理解決方案 1424次閱讀
- DesignStart Cortex-M3軟件開發(fā)網(wǎng)上課程 5863次閱讀
- ARM Cortex M3/M4微控制器最大效率設(shè)計三秘訣 3671次閱讀
- 采用ARM Cortex-M3的USB熱電偶溫度測量系統(tǒng)電路圖 3933次閱讀
下載排行
本周
- 1GD100PIX120C6SNA規(guī)格書
- 0.98 MB | 3次下載 | 免費
- 2一款入耳式耳機的仿真與分析
- 0.44 MB | 2次下載 | 免費
- 3Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費
- 4人形機器人電機驅(qū)動和傳感報告
- 4.27 MB | 2次下載 | 免費
- 5無線系統(tǒng)中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 6Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 7DMP300C1型微機變壓器保護測控裝置技術(shù)說明書
- 4.11 MB | 次下載 | 10 積分
- 8用MT3540芯片設(shè)計BOOST電路 1(可下載)
- 445.66 KB | 次下載 | 免費
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊
- 18.77 MB | 27次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態(tài)的學(xué)習(xí)課件免費下載
- 4.03 MB | 25次下載 | 1 積分
- 4AIWA HS-J303 MKⅡ維修手冊
- 22.47 MB | 23次下載 | 10 積分
- 5多級放大電路的學(xué)習(xí)課件免費下載
- 1.81 MB | 21次下載 | 2 積分
- 6九陽豆?jié){機高清原理圖
- 2.47 MB | 20次下載 | 1 積分
- 7AIWA HS-J202/HS-J202M/HS-J800維修手冊
- 13.60 MB | 15次下載 | 10 積分
- 81875功放原理圖
- 0.04 MB | 11次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論