从eeprom接收数据时程序崩溃

每次尝试运行此link中的代码时,我的程序都会崩溃。问题似乎出在*((char*)&configuration + i) = (char)EEPROM.read(i);这一行。我认为不需要为变量configuration分配内存,因为变量configuration已经初始化。

int loadconfig() { 

  if(EEPROM.read(0) == config_ver[0] && EEPROM.read(1) == config_ver[1] &&
    EEPROM.read(2) == config_ver[2] && EEPROM.read(3) == config_ver[3]) {

    for(int i = 0; i <= sizeof(configuration_type); i++) {

      *((char*)&configuration + i) = (char)EEPROM.read(i);     //<------problem
    }
    return 1;
  }
  return 0;
} 

链接中的整个代码:

#include <EEPROM.h>

#define CONFIG_VERSION "VER01"

// Where in EEPROM?
#define CONFIG_START 32

typedef struct
{
  char version[6]; // detect if setting actually are written
  int my_setting_integer;
} configuration_type;

// with DEFAULT values!
configuration_type CONFIGURATION = {
  CONFIG_VERSION,42
};

// load whats in EEPROM in to the local CONFIGURATION if it is a valid setting
int loadConfig() {
  // is it correct?
  if (EEPROM.read(CONFIG_START + 0) == CONFIG_VERSION[0] &&
      EEPROM.read(CONFIG_START + 1) == CONFIG_VERSION[1] &&
      EEPROM.read(CONFIG_START + 2) == CONFIG_VERSION[2] &&
      EEPROM.read(CONFIG_START + 3) == CONFIG_VERSION[3] &&
      EEPROM.read(CONFIG_START + 4) == CONFIG_VERSION[4]){

  // load (overwrite) the local configuration struct
    for (unsigned int i=0; i<sizeof(CONFIGURATION); i++){
      *((char*)&CONFIGURATION + i) = EEPROM.read(CONFIG_START + i);
    }
    return 1; // return 1 if config loaded 
  }
  return 0; // return 0 if config NOT loaded
}

// save the CONFIGURATION in to EEPROM
void saveConfig() {
  for (unsigned int i=0; i<sizeof(CONFIGURATION); i++)
    EEPROM.write(CONFIG_START + i,*((char*)&CONFIGURATION + i));
}

void setup() {
  Serial.begin(9600);
  Serial.println("Hello world!");  // prints hello with ending line break 

  if(loadConfig()){
    Serial.println("Config loaded:");
    Serial.println(CONFIGURATION.version);
    Serial.println(CONFIGURATION.my_setting_integer);
  }else{
    Serial.println("Config not loaded!");
    saveConfig(); // overwrite with the default settings
  }
}

void loop() {
  //every 5s increment and save the settings!
  delay(5000);
  CONFIGURATION.my_setting_integer++;
  saveConfig();
}
liu0659222 回答:从eeprom接收数据时程序崩溃

它是for循环中的“

将其更改为“

提示:典型的缓冲区溢出问题

本文链接:https://www.f2er.com/3117718.html

大家都在问