duxingkei 发表于 2012-5-22 11:42:28

如何在studio4.19限制LGT8F08A的SRAM在程序中使用超出实际内存?

本帖最后由 duxingkei 于 2012-5-22 11:48 编辑

1、之前我移植了TCP/IP协议 eth_rem_dev 到LGT8F08A,但是实际跑起来的时候发现一旦有web连接是程序总是重启,在MEGA8上就正常。
后来猜测估计是SRAM不够的原因,还有可能就是栈指针初始化问题导致。

2、于是参照讨论的帖子 关于LGT的栈指针初始化问题
在编译器中和程序初始化中分别实验,程序重启依旧。

3、于是查看手册 LGT8F0XA Series Programming Manual v1.3.pdf
找了半天,没发现哪里清除注明 LGT8F0XA 的SRAM内存是多少,只是注明的是256/512字节,搞得我好糊涂。
虽然映像中是512的SRAM!
http://cache.ourdev.cn/new2012/forum/201205/16/171150cd1si2idef2swthv.png

4、现在的问题是:在TCP/IP协议 中有一个BUFFER ,大小是400 BYTE,程序中还有其他的变量,不知道这些变量是否超出了LGT8F08A的实际SRAM范围!
我选的MCU类型为MEGA164P,我把400改为2000 重新编译还是没有报错。只是程序运行起来就错乱了!

5、记得以前在编译程序时,变量占用RAM超过MCU实际值时会报错的,但是好像studio没有限制功能!求帮助!!

goodcode 发表于 2012-5-22 14:19:49

不只手册 官网上也是只有 LGT8F0XA 没有具体型号的具体资源 希望下次能更新一下

logicgreen 发表于 2012-5-22 16:46:32

仁兄,SRAM的空间是从$100至$2FF,只有512Byte!

SRAM总体用量不要超过512B!

duxingkei 发表于 2012-5-23 22:09:28

logicgreen 发表于 2012-5-22 16:46 static/image/common/back.gif
仁兄,SRAM的空间是从$100至$2FF,只有512Byte!

SRAM总体用量不要超过512B!

知道不要超过512KB,请问怎么去看程序中SRAM的用量呢?

bozai 发表于 2012-5-24 08:47:48

SRAM中存在两种变量,一个是全局的,一个是临时的。 临时的放在Stack 或者heap里。
全局变量的大小在编译时已经知道了(AVR Studio告诉你的就是这个的用量)。 剩下的就是堆栈空间。这个是给程序运行用的空间。
每调用一次程序就会消耗一些用于保存一些必要的寄存器值到stack里。 子程序里定义了变量,这个也会从stack里分。 malloc一片内存会从heap里分。

举个简单例子,假如AVR Studio已经告诉你SRAM消耗了400Byte,那么你程序可用的内存就只有112Byte。 假如你的一个函数里定义了局部数组是112Byte (实际比这小就会有问题),那么这时你的程序只要调用到这个函数就挂了(不一定挂,但总会有莫名其妙的问题)。

uc_c++ 发表于 2012-5-24 08:54:12

超过RAM容量报错用IAR。

duxingkei 发表于 2012-5-24 18:49:22

bozai 发表于 2012-5-24 08:47 static/image/common/back.gif
SRAM中存在两种变量,一个是全局的,一个是临时的。 临时的放在Stack 或者heap里。
全局变量的大小在编译时 ...

谢谢,你说的我都明白。
我想问的是:
1、当我使用的变量数组超过512字节时,AVR Studio没有报错,我用的mega164p,1KB的sram,即使我把数组变量设置为 unsigned char buf;
编译时,编译器竟然没有报错???
如何解决?

2,当AVR Studio编译完程序后,怎样查看ram的用量??

timberg 发表于 2012-6-4 20:51:16

关注这个问题
要是解决不了,很多东西都会有问题

gmliwei7208 发表于 2012-6-5 10:02:49

我也是在使用中感觉有很多地方不便,新生事物都是要摸索着来的,唉

sibtck 发表于 2012-6-26 15:19:51

duxingkei 发表于 2012-5-24 18:49 static/image/common/back.gif
谢谢,你说的我都明白。
我想问的是:
1、当我使用的变量数组超过512字节时,AVR Studio没有报错,我用的 ...

你这个定义的是临时变量吧,不会提示占用RAM.而只有在全局变量时才提示.你把这个改为全局变量试一下,就会报错了,记得定义时初始化一下值.

duxingkei 发表于 2012-6-29 20:15:19

哦,我定义的是全局变量,但是没有初始化值!
有空试试
页: [1]
查看完整版本: 如何在studio4.19限制LGT8F08A的SRAM在程序中使用超出实际内存?