1

我有一个关于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 字节的闪存

完成了。谢谢你。

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

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

4

2 回答 2

3

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

我建议阅读自述文件库以从中获取 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 的库存),因为它声称更优化。

于 2013-02-28T17:02:31.840 回答
0

装备自己以防万一还有人遇到类似问题:请阅读博客文章优化 SRAM以管理有限的 Arduino 内存。

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

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

于 2016-04-11T18:22:59.533 回答