Arduino打印在大量打印时失败

时间:2017-04-29 03:14:00

标签: c++ arrays arduino arduino-uno

我在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的使用有关?

3 个答案:

答案 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)

检查这个的简单方法是对数组进行硬编码: enter image description here

如您所见,草图使用1,798字节的RAM,编译器已经在抱怨。如果将其更改为500,它将告诉您使用的RAM比现有的多。

答案 2 :(得分:1)

  1. 由于@ per1234提到RAM是一个问题
  2. 这个小微的双倍极其昂贵。每次计算都需要数百个时钟周期,打印需要大量的RAM和时间。 uC时间。您应该尝试使用整数/长整数 - 使用缩放算法