STM32進入HardFault_Handler處理辦法

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,就會跳轉到進入循環中斷以前的函數處。仔細查看這部分函數被調用或者數組內存使用狀況。 
      這裏寫圖片描述
相關文章
相關標籤/搜索