打印
[STM8]

关于STM8L052 IAP环境下RAM问题

[复制链接]
1277|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wsl_5631|  楼主 | 2016-7-2 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
局部变量用的RAM是怎么分配的?我改变局部变量数组的大小,为什么code memory变大,而data memory不变

void    Save_open_recrod()
{
    uchar temp[642];
   。。。。。。
编译后
  28 783 bytes of readonly  code memory
     793 bytes of readonly  data memory
   2 497 bytes of readwrite data memory

void    Save_open_recrod()
{
    uchar temp[1642];
   。。。。。。
编译后
  28 799 bytes of readonly  code memory
     793 bytes of readonly  data memory
   2 497 bytes of readwrite data memory

这是咋回事?

  

沙发
wsl_5631|  楼主 | 2016-7-2 14:35 | 只看该作者
有高手知道吗

使用特权

评论回复
板凳
xyz549040622| | 2016-7-2 16:49 | 只看该作者
是不是因为你没操作的原因呢?

使用特权

评论回复
地板
Thethree| | 2016-7-2 21:17 | 只看该作者
是不是优化掉了啊?是keil MDK吗

使用特权

评论回复
5
mcu5i51| | 2016-7-3 09:37 | 只看该作者
你有没有调整堆的大小,局部变量是在堆中分配的,堆是在IAR中设置的定值

使用特权

评论回复
6
laoxianccc| | 2016-7-3 09:47 | 只看该作者
Project中打开Option,选择General Option里的Stack/Heap,看看你的堆栈大小有没有调整,默认大小为256

使用特权

评论回复
7
wsl_5631|  楼主 | 2016-7-4 08:00 | 只看该作者
mcu5i51 发表于 2016-7-3 09:37
你有没有调整堆的大小,局部变量是在堆中分配的,堆是在IAR中设置的定值

应该是局部变量超过堆的大小,IAP不会做检查,不会报错。使用时只能自己注意一下。

使用特权

评论回复
8
laoxianccc| | 2016-11-19 16:48 | 只看该作者
wsl_5631 发表于 2016-7-4 08:00
应该是局部变量超过堆的大小,IAP不会做检查,不会报错。使用时只能自己注意一下。 ...

你的函数局部变量超出了堆的大小,IAR不会给与任何提示,但是这样写出来的程序会出现跑飞的情况。这种情况最好用全局变量,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

335

帖子

2

粉丝