1. 程式人生 > >stm32堆疊溢位及cortex m3 ram解析

stm32堆疊溢位及cortex m3 ram解析

出錯的程式不停執行“  B   .  ” 這條程式碼,即不停跳轉到自己。 查閱了App_Fault_ISR,應該是堆疊溢位造成的。 之前也嘗試過增大mcu定義的stack大小與ucos任務的stack大小,並未解決。 整理相應知識點如下: 在os_cpu.h裡定義了ucos堆疊增長方向為至上而下; stm32棧空間增長方向為至上而下; 檢測是否出現堆疊溢位:在棧頂定義一個值,觀察該值是否變化; 關於ram的分割槽,網上資料有兩種矛盾的說法,不知道哪個是正確的: 1.棧頂位置=0x20000000 + RWDATA + ZIDATA - STACK SIZE,如圖: 2. 根據圖所定義,棧頂位置=0x20000000 + RWDATA + ZIDATA - 使用者RAM區 - STACK SIZE。
閱讀工程的.map檔案,其ram自低向高分為.data、.bss、STACK三個區域。
已初始化的全域性變數儲存在.data 段中,未初始化的全域性變數儲存在.bss 段中,剩下的為棧區。 由此可知2中的說法是錯誤的。