STM32 Cortex-M3 NMI異常


最近在調試STM32 Cortex-M3 HardFault異常,以外發現程序居然進入了NMI異常。對於這種異常,從來沒有出現過,如下圖所示。

 

此時的R0等寄存器的值如下圖所示,

 

堆棧指針是0x2000 74F4,以此推斷程序跑飛的地方,向后或者向前都不對,不是R0等8個寄存器的值。

 

這樣無法找到出錯的指令在何處了,后來跟蹤調試程序,找到了出錯的地方,如下圖所示,在0x0801 98CC處,有一條跳轉指令BLX   R9,此時的R9的值是0x0800 0135,而這個地址對應的就是NMI中斷處,即程序自己跳轉到了NMI中斷。

 

已經找到了出錯的地方,可不可以據此反推呢?正常程序觸發中斷后,會將R0等8個寄存器一次入棧,而此時沒有入棧。R14即LR寄存器的值卻是0x0801 98CF,而這個值卻是在程序跑飛的指令所在的地址,發生NMI異常時,是怎么壓棧的,不得而知。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM