我在Arduino Uno的ContainerViewController
函数中运行这段代码:
loop()
当int times = 400;
int i;
double raw[times];
for (i = 0; i < times; i++) {
Serial.println(i);
raw[i] = (double) i;
}
for (i = 0; i < times; i++) {
Serial.println(raw[i]);
}
小于500时,它打印正常,但当times
接近500时,串行打印将停在随机位置或打印奇怪的字符,有时根本不会打印。
是否与RAM的使用有关?
答案 0 :(得分:4)
Arduino Uno使用ATmega328P微控制器。如果您查看该微控制器的数据表的第一页: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf 你会注意到它说:
2KBytes内部SRAM
您的阵列位于SRAM中。以字节为单位的数组大小可以通过以下公式计算:
sizeof(double) * times
。在这种情况下,sizeof(double)
是4个字节,因此当您将times
设置为500时,数组使用2000个字节。在Uno上运行的其余代码需要一些额外的SRAM,因此您使用的内存更多。这会导致未定义的行为,从而导致您遇到不良后果。
答案 1 :(得分:2)
答案 2 :(得分:1)