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