【问题标题】:Arduino flash memory limitArduino闪存限制
【发布时间】:2013-02-14 14:04:49
【问题描述】:

我在Arduino Uno 上有一个项目,我正在从Eclipse 制作它。 AVR 编译器给了我这个:

avrdude: 24348 字节的闪存写入 avrdude: 验证闪存 针对 SunAngles.hex:avrdude:从输入文件加载数据闪存数据 SunAngles.hex: avrdude: 输入文件 SunAngles.hex 自动检测为 Intel Hex avrdude:输入文件 SunAngles.hex 包含 24348 字节 avrdude:读取片上闪存数据:

阅读 | ################################################# | 100% 3.45秒

avrdude:正在验证 ... avrdude:已验证 24348 字节的闪存

avrdude 完成了。谢谢。

串行监视器不打印任何内容。如果我将项目设为 23999 字节,那么串行监视器就可以工作。我检查了 Eclipse 的串行监视器和 Arduino IDE 的串行监视器。他们有同样的问题。在该网站上,它说 Arduino Uno 有 32 KB 闪存,而 0.5 KB 用于引导加载程序。怎么了?

在另一个问题中,有人说要使用serial.print(F(something));,他们为 pgm 提供了一个库。我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: eclipse optimization eclipse-plugin arduino ram


    【解决方案1】:

    不要忘记 RAM 的小尺寸,即 328 的 2 KB。您可能只是用完了 RAM。我了解到,当它用完时,它只是坐在那里。起初它看起来真的像一个闪存边界问题。就像你的症状一样。

    我从这里建议reading the readme library to get the FreeRAM它提到了“Serial.print”如何同时消耗 RAM 和 ROM。

    我现在总是用

    Serial.print(F("HELLO"));
    

    Serial.print("HELLO");
    

    因为它节省了 RAM,这对于 lcd.print 应该是正确的。我总是放一个

    Serial.println(freeMemory(), DEC);  // Print how much RAM is available.
    

    在代码的开头,注意。注意需要有空间来运行实际代码并递归到其中。

    F() 现在已在 Arduino 1.0 中提供,并取代了对库函数 getPSTR() 的需求。

    最新的 Arduino IDE 还对预期的 RAM 使用情况进行了非常粗略的估计。所以在 avr-gcc 中有一个开关。您可能还想尝试使用 avr-gcc 4.7.0 而不是 4.3.2(Arduino 的库存),因为它声称更优化。

    【讨论】:

    【解决方案2】:

    装备自己以防万一还有人遇到类似问题:请阅读关于管理有限 Arduino 内存的博文 Optimizing SRAM

    从那里开始,您将在开发草图时记住一些事情。

    尽可能避免使用任何全局变量。将它们保留在其功能的本地。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多