如果使用太多闪存,Arduino Ethernet.begin会冻结

时间:2017-11-14 15:14:21

标签: c++ arduino

如果使用太多闪光灯,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吗?

0 个答案:

没有答案