轉自 http://blog.163.com/zhaojun_xf/blog/static/30050580201561785622486/
在很多情況下,代碼都會進入HardFault_Handler中斷,例如:堆棧溢出、數組溢出、無效指針的訪問等等。對於這種問題大多很難查找。在網絡上有很多種快速定位的方法,但實際上成效有效。
總結:
最近本人也遇到這樣的問題,想通過這個問題找到最快速的定位方法,但成效也不大,但發現有一定的規律,故特地把這些連續抓圖發上,作為記錄,雖然還沒找到其存在的必然性,但可以作為占時的借進。
方法和簡單,在HardFault_Handler中斷打一個斷點,可以發現,進入斷點之前的R4內的只為,進入這個HardFault_Handler之前的函數調用值。
總結:
NULL也會導致這個錯誤的,所以在使用NULL時要特別注意,應該對所有指針變量添加NULL判斷,保證指針在NULL時不使用任何指針變量,防止使用NULL的變量進入硬件錯誤。
實例:
一個項目中使用到了串口,而這項目中的串口是直接引了兩條線出來。下開發過程中沒有發現任何問題,最好在測試中發現,很多時候單片機不能夠正常運行,都進入了硬件中斷。而且一個奇怪的現象是,板子傾斜一定的角度或者翻轉過來就能夠正常運行。最好跟蹤發現是由於串口干擾導致,串口中斷,在接收數據時,由於還沒有初始化完成就接收到數據,導致指針還沒有初始化,而使用。從而出現了硬件錯誤。
