關(guān)于AVR CSTACK和RSTACK的總結(jié)
首先聲明: ICC 自動(dòng)分配RAMIAR可手動(dòng)分配RAM
提個(gè)醒:程序用到大數(shù)組時(shí),一定要注意 RAM分配問題
1、RSTACK: 存儲(chǔ) 程序調(diào)用返回地址IAR設(shè)置單位為字 (軟件中默認(rèn))16字 占用32個(gè)字節(jié);
例: 1616層中斷函數(shù)嵌套;//中斷出問題一般是 RSTACK的問題。
2、CSTACK:局部變量存儲(chǔ)區(qū)域 所有子函數(shù)的局部變量從該堆棧申請(qǐng),用完還回;
程序中用到大數(shù)組時(shí),要考慮CSTACK的設(shè)置
可以這么理解:
RAM= CSTACK+RSTACK+全局變量;
遇到的問題:
AVRMEGA8515LOPTION-Target 中memory mode 選的tiny,提示 RAM溢出,需設(shè)置更小的CSTACK或者RSTACK給其騰出更多的空間; 更改memory mode 選得small,編譯過了。(本以為問題通過修改memory解決了,但嚴(yán)重的BUG卻出現(xiàn)在這里,能夠讀取溫度傳感器溫度,但是與標(biāo)準(zhǔn)溫度相差3℃ ,用了兩天時(shí)間,查找問題的原因,最終:memory修改回 tiny模式,把常量數(shù)組全寫到FLASH中,編譯通過,解決了該問題 )。
只能說這款單片機(jī)太落后,MEGA88PA等,memory模式直接是small模式
1K的RAM確實(shí)比512Byte的RAM要好?。。。?/p>