我認為單片機堆棧溢出最重要的原因是我們編程序有問題,即在程序設計初期沒有留出足夠的空間供堆棧使用,堆棧一旦溢出程序一般會亂指,就是我們所說的程序跑分。一般我們不容許出現這個現象,因此我們在設計程序的時候首先要在內部ram里開辟一段連續(xù)的地址當堆棧使用,且只能讓它通過push和pop指令進行訪問,而且每次訪問堆棧后注意別讓堆棧溢出。
stc單片機堆棧溢出的解決方法
ram模式用large,盡量用xram,減少函數嵌套層數,如果一個函數只被一個函數調用,就盡量合并下。
編譯器會根據片內ram消耗量自動確定sp指針,而且51也只能用片內ram做堆棧。
keil c51的堆棧不需要你去設置的,編譯器會把data ram剩余的空間都劃分給棧,所以盡量減少對data的使用。