【发布时间】:2015-12-20 15:28:36
【问题描述】:
我一直在尝试在 ATMEGA2560 上运行一些代码,最后我将一切归结为:
作品
#include "Arduino.h"
#include "HardwareSerial.h"
const char bob[7000] = "Hello\0";
void setup(void) {
Serial.begin(9600);
Serial.println("jshInit...");
Serial.println(bob);
}
void loop(void) {
Serial.println("foo...");
}
什么都不做
#include "Arduino.h"
#include "HardwareSerial.h"
const char bob[8000] = "Hello\0";
void setup(void) {
Serial.begin(9600);
Serial.println("jshInit...");
Serial.println(bob);
}
void loop(void) {
Serial.println("foo...");
}
这里唯一的区别是bob 的大小。 没有编译器警告或任何东西,即使bob 是20000,如果bob 数组太大,Arduino 也会拒绝工作。
有谁知道怎么回事?我在这里使用 Arduino IDE 进行编译,但是对于我的主要项目,我使用的是 avr-gcc (GCC) 4.5.3,并且我也尝试了 4.8.2——所有这些都存在同样的问题。
atmega2560 有 256kb 闪存和 8kB RAM。可能是我正在使用所有 RAM(但它应该告诉我如果是这样吗?),还有 bob 上的 const 关键字应该意味着它进入闪存?
【问题讨论】:
-
我只是 saw this page on PROGMEM 并修复了它 - 但是如果我用完 RAM,我如何收到警告,理想情况下如何让 const 自动执行此操作
标签: arrays arduino avr avr-gcc atmega