如果使用太多闪光灯,Arduino Mega 2560似乎会在Ethernet.begin()
上无限冻结。
当有大约29%的已用程序存储空间时,setup()
执行没有任何问题。但是,当添加另一个~30kB(总共约41%)时,草图永远不会完成其设置。未插入SD卡(使用率约为29%),验证/构建/上传在两种情况下均成功
以下草图演示了该问题:
#include <Ethernet.h>
#define TOO_MUCH 1
static const PROGMEM byte __attribute__((aligned(SPM_PAGESIZE))) data1[31488] = { 0 };
static const PROGMEM byte __attribute__((aligned(SPM_PAGESIZE))) data2[31488] = { 0 };
static const PROGMEM byte __attribute__((aligned(SPM_PAGESIZE))) data3[31488] = { 0 };//opted-out if not used
void setup() {
Serial.begin(9600);
byte mac[6] = {0xC6, 0xB4, 0x00, 0x00, 0x00, 0x05};
Serial.println("Starting ethernet");
Ethernet.begin(mac);
Serial.println("Started");//#IF TOO_MUCH this never executes
}
void loop() {
static long lastTime = millis();
if (millis() - lastTime > 2000) {
lastTime = millis();
Serial.println(pgm_get_far_address(data1));
Serial.println(pgm_get_far_address(data2));//works fine if TOO_MUCH == 0
#if TOO_MUCH
Serial.println(pgm_get_far_address(data3));//data3 opted-out if TOO_MUCH == 0
#endif
}
}
此草图中是否有错误?这是Arduion Mega 2560的限制,即使使用pgm_get_far_address
es,也只能使用总共256kB的〜64kB吗?