keil調試:局部變量地址和全局變量地址重疊

最近keil中調試STM32程序時,出現的問題是局部變量沖掉了全局變量的數據。
查資料,原因是棧太小,或者說是自己定義的局部變量太大。局部變量存放在棧中,棧在RAM區,由系統自動管理,查看map文件可以看到棧區空間位於在系統計算的實際需要的RAM大小的最後部分(不是RAM區的最後),棧的大小在系統啓動文件中默認設置好了,Stack_Size EQU 0x00000400,只有1k,而我在定義局部變量時,搞了個4k的數組,棧完全不夠裝不夠裝,於是…,系統對這個問題編譯也沒有報錯,解決辦法可以修改代碼,也可以修改棧尺寸,只要RAM夠用就行。
修改棧的大小,編譯後ZI-data值會相應變化,其他值不變。(Program Size: Code=35360 RO-data=8816 RW-data=132 ZI-data=11764, Code + RO-data + RW-data代表的是佔用FLASH的大小,RW-data+ZI-data代表的是佔用RAM的大小 )

參考文章:
stm32 堆和棧(stm32 Heap & Stack)【worldsing筆記】 - slj_win的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/slj_win/article/details/16906141

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