單片機(jī)堆棧溢出怎么解決?
我認(rèn)為單片機(jī)堆棧溢出最重要的原因是我們編程序有問(wèn)題,即在程序設(shè)計(jì)初期沒(méi)有留出足夠的空間供堆棧使用,堆棧一旦溢出程序一般會(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的使用。
編輯:admin 最后修改時(shí)間:2018-05-08