一文关于AVR CSTACK和RSTACK的总结

控制/MCU

1879人已加入

描述

首先声明: 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要好。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分