關於STM32處理器的HardFault_Handler錯誤原因

        STM32xx處理器是ST公司採用Cortex-M的IP覈實現的處理器,擁有緊湊代碼量以及非常高的性價比,在單片機領域佔用量非常強勁。本人所在的公司甚至用STM32F207直接替代了一些使用S3C4510B處理器的場景,因爲S3C4510B面臨着停產的危險,爲了產品過度平穩,STM32F處理器也是一種不錯的選擇,可以應用於一些簡單的單板設備或者必須不需要大量存儲和內存的情況,開發過程中也遇到了STM32F初學者經常會遇到的一個系統中斷錯誤提示:HardFault_Handler。

        HandFault_Handler錯誤原因在我使用碰到過的有3種情況:

        (1) 堆棧空間溢出

               堆棧空間溢出問題,主要是通過增大工程中類似startup_stm32f2xx.s文件中的宏定義Stack_Size和Heap_Size來修改此問題,至於項目工程中遇到大致的堆棧空間讀者可以通過MDK在線調試查看或者讀者自行分析下函數調用的深度來分析。

        (2) 數據訪問未對齊

              數據未對齊訪問一般是由於指針造成的。讀者可以通過打印相應變量的地址看是否爲4字節對齊,比如下面給出的例子,因爲你不能保證performP->rxPkt[4]或者performP->rxPkt[0]的地址就是4的整數倍,如果強制進行unsigned int *轉化訪問,就會出現HardFault_Hander錯誤:


                            

      (3) 數組越界或者指針越界等非法訪問。


          後續如果有發現其他原因造成HardFault_Hander錯誤,歡迎自己和大家補充。多多益善。



      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章