一次STM32進入HardFault_Handler 的解決情況


STM32進入HardFault_Handler調試

--- title: STM32進入HardFault_Handler調試 date: 2020-06-18 10:26:48 categories: tags: - stm32 - debug - FreeRTOS ---

背景

工程要移植RTOS,以做業務改進。

移植了FreeRTOS,發現沒有執行程序;在線仿真的時候,發現PC走到SystemInit,第一條語句還沒執行完就進入了HardFault_Handler

分析

1、檢查了startup_stm32xxx.s,有對SVC_Handler等入口進行處理。而且程序是還沒走到vTaskStartScheduler就出問題的。

仔細查閱了網上的資料,STM32出現HardFault_Handler故障的原因主要有兩個方面:

  • 內存溢出或者訪問越界。
  • 堆棧溢出,增加堆棧的大小。

2、用keil的仿真,根據PC與MSP、PSP的值找對應的錯誤現場。但由於是一執行C語句就異常的,所以這個方法沒用。

3、回顧自己的操作記錄。

想起自己在移植的時候,因為出現了Error: L6406E: No space in execution regions with .ANY selector matching xx.o(.bss).,於是改大了IARM1的size為0xF0000。超出了可訪問的范圍。改回原來的0xFF00以后程序又編譯不過。

想起FreeRTOSConfig.h中有對於棧大小的配置,於是將configTOTAL_HEAP_SIZE改小為( ( size_t ) ( 5 * 1024 ) )

問題解決,順利跑起來。

start_task
start_task
start_task


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM