如何在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没有限制功能!求帮助!!
不只手册 官网上也是只有 LGT8F0XA 没有具体型号的具体资源 希望下次能更新一下 仁兄,SRAM的空间是从$100至$2FF,只有512Byte!
SRAM总体用量不要超过512B! logicgreen 发表于 2012-5-22 16:46 static/image/common/back.gif
仁兄,SRAM的空间是从$100至$2FF,只有512Byte!
SRAM总体用量不要超过512B!
知道不要超过512KB,请问怎么去看程序中SRAM的用量呢?
SRAM中存在两种变量,一个是全局的,一个是临时的。 临时的放在Stack 或者heap里。
全局变量的大小在编译时已经知道了(AVR Studio告诉你的就是这个的用量)。 剩下的就是堆栈空间。这个是给程序运行用的空间。
每调用一次程序就会消耗一些用于保存一些必要的寄存器值到stack里。 子程序里定义了变量,这个也会从stack里分。 malloc一片内存会从heap里分。
举个简单例子,假如AVR Studio已经告诉你SRAM消耗了400Byte,那么你程序可用的内存就只有112Byte。 假如你的一个函数里定义了局部数组是112Byte (实际比这小就会有问题),那么这时你的程序只要调用到这个函数就挂了(不一定挂,但总会有莫名其妙的问题)。 超过RAM容量报错用IAR。 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的用量?? 关注这个问题
要是解决不了,很多东西都会有问题 我也是在使用中感觉有很多地方不便,新生事物都是要摸索着来的,唉 duxingkei 发表于 2012-5-24 18:49 static/image/common/back.gif
谢谢,你说的我都明白。
我想问的是:
1、当我使用的变量数组超过512字节时,AVR Studio没有报错,我用的 ...
你这个定义的是临时变量吧,不会提示占用RAM.而只有在全局变量时才提示.你把这个改为全局变量试一下,就会报错了,记得定义时初始化一下值. 哦,我定义的是全局变量,但是没有初始化值!
有空试试
页:
[1]