我遇到了一个非常奇怪的问题,即无论数组的大小如何,程序使用的内存量似乎都没有变化。
我正在使用Arduino编译器,代码示例如下:
unsigned char ary[]={0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,
0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,};
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
如果我删除数组并重新编译,文件大小仍然相同。也许我已经离开编码场一段时间了,对可能发生的事情有任何想法?
unsigned char ary[] = {
0x00,0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,
0x01,0x02,0x03,0x04,0x00,0x01,0x02,0x03,0x00,0x01,0x02,0x03,
};
unsigned char var1;
void setup() {
// put your setup code here, to run once:
int res = myFunction(&ary[0]);
}
void loop() {
// put your main code here, to run repeatedly:
}
int myFunction (unsigned char *adr){
//unsigned char b=4;
unsigned char c;
for(int n=0;n<1;n++)c=adr[0];
var1=c;
return 0;
}
答案 0 :(得分:1)
Arduino编译器自动取出部分未在任何地方使用的代码:死代码消除。
如果您例如添加
ary[0] = 5;
在设置或循环部分中,草图大小会增加,并且在向ary
添加元素时会继续增长。
没有添加的行,我有一个444字节的草图(和9字节的动态内存)。添加该行的是494字节(和31字节的内存)。
答案 1 :(得分:0)
感谢您的帮助人员,我使用的每个平台上的优化设置会产生不同的结果。尝试禁用arduino的优化,并构建完整的文件大小(无论是否访问数据)。如果有人有兴趣,可以在这里找到如何执行此操作的链接(记得在更改前保存副本):
此致