好久沒寫技術部落格了,這次就把農曆新年前遇到的問題在這裡說一下吧。
在用STM32F4寫程式,調試時候會遇到程式在調試的時候死在某一段代碼上。一直在一段代碼上死循環。
經過百度以後發現了一些造成這個錯誤的原因:
STM32出現HardFault_Handler故障的原因主要有兩個方面:
1、記憶體溢出或者通路越界。這個需要自己寫程式的時候規範代碼,遇到了需要慢慢排查。
2、堆棧溢出。增加堆棧的大小。
經過排查發現應該是堆棧溢出造成的程式錯誤。因為我的程式中對子函數的調用比較多,而且需要的臨時參數和變量很多容易造成堆棧的不夠用的問題。
解決方法:隻要增加堆棧的大小就行了。
打開官方的startup_stm32f40_41xxx.s(也可能是其他的) 找到Stack_Size EQU 設定點
将改堆棧大小設定改大一點就可以了 。但是不能改的很大,改很大也會報錯的。
這篇文章隻是很粗略的解決了這個問題,具體的原因大家想了解的話還是要去看看M4或者M3的核心分析一下。
2016.3.19 晚 于旺園
參考資料:http://blog.csdn.net/zyboy2000/article/details/7668331