Arduino中的预定义数组

时间:2018-02-10 14:02:17

标签: c++ arrays arduino

我遇到了一个非常奇怪的问题,即无论数组的大小如何,程序使用的内存量似乎都没有变化。

我正在使用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;
    }

2 个答案:

答案 0 :(得分:1)

Arduino编译器自动取出部分未在任何地方使用的代码:死代码消除。

如果您例如添加

ary[0]  = 5;

在设置或循环部分中,草图大小会增加,并且在向ary添加元素时会继续增长。

没有添加的行,我有一个444字节的草图(和9字节的动态内存)。添加该行的是494字节(和31字节的内存)。

答案 1 :(得分:0)

感谢您的帮助人员,我使用的每个平台上的优化设置会产生不同的结果。尝试禁用arduino的优化,并构建完整的文件大小(无论是否访问数据)。如果有人有兴趣,可以在这里找到如何执行此操作的链接(记得在更改前保存副本):

Arduino optimising

此致