STM32進入HardFault_Handler處理辦法
HardFault_Handler出現的情況一般有兩種:
一種是:數組越界
一種是:堆棧溢出,程序指針指飛
方法一
- 在中斷HardFault_Handler中的while()處打上斷點,讓程序執行到此處停止。
- 在Registers里面找到R14(LR)的值,我的這里是:0xFFFFFFF9
說明一下:
- 0xFFFFFFF9對應的是要看MSP寄存器
- 0xFFFFFFFD對應的是要看PSP寄存器
所以這里需要查找的內存地址是MSP的值:0x20008828
- 在memory里面查找MSP的值:0x20008828,然后在對應的行里面找到地址,地址一般格式都是:0x0800BA68這樣的。
- 4.在Disassembly里面右鍵選擇Show Code at Address,把找到的地址輸進去進行搜索,然后就會找到相對應的代碼,這里的代碼就是在進入循環中斷之前的時候的情況,仔細查看這部分函數被調用或者數組內存使用情況。
方法二
- 在中斷HardFault_Handler中的while()處打上斷點,讓程序執行到此處停止。
- 在keil中打開Call Stack + Locals,然后在HardFault_Handler上 右鍵選擇:Show Caller Code,就會跳轉到進入循環中斷之前的函數處。仔細查看這部分函數被調用或者數組內存使用情況。