首先声明: ICC 自动分配RAMIAR可手动分配RAM
提个醒:程序用到大数组时,一定要注意 RAM分配问题
1、RSTACK: 存储 程序调用返回地址IAR设置单位为字 (软件中默认)16字 占用32个字节;
例: 1616层中断函数嵌套;//中断出问题一般是 RSTACK的问题。
2、CSTACK:局部变量存储区域 所有子函数的局部变量从该堆栈申请,用完还回;
程序中用到大数组时,要考虑CSTACK的设置
可以这么理解:
RAM= CSTACK+RSTACK+全局变量;
遇到的问题:
AVRMEGA8515LOPTION-Target 中memory mode 选的TIny,提示 RAM溢出,需设置更小的CSTACK或者RSTACK给其腾出更多的空间; 更改memory mode 选得small,编译过了。(本以为问题通过修改memory解决了,但严重的BUG却出现在这里,能够读取温度传感器温度,但是与标准温度相差3℃ ,用了两天时间,查找问题的原因,最终:memory修改回 TIny模式,把常量数组全写到FLASH中,编译通过,解决了该问题 )。
只能说这款单片机太落后,MEGA88PA等,memory模式直接是small模式
1K的RAM确实比512Byte的RAM要好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)