Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向未保存到eeprom的结构变量的指针_C++_Arduino_Esp32 - Fatal编程技术网

C++ 指向未保存到eeprom的结构变量的指针

C++ 指向未保存到eeprom的结构变量的指针,c++,arduino,esp32,C++,Arduino,Esp32,我有一些代码来存储配置数据到EEPROM。变量配置中的数据可以打印到串行控制台,但不能保存到EEPROM。我使用的是ESP32(Arduino框架)。下面的代码是本文档中代码的缩短版本 #包括 #包括 #定义配置版本“VER01” 类型定义结构{ 字符版本[10]; int设置; }配置类型; 配置类型配置={config\u ver,50}; void saveconfig(){ Serial.println(“保存配置!!”); 对于(int i=0;i

我有一些代码来存储配置数据到EEPROM。变量配置中的数据可以打印到串行控制台,但不能保存到EEPROM。我使用的是ESP32(Arduino框架)。下面的代码是本文档中代码的缩短版本

#包括
#包括
#定义配置版本“VER01”
类型定义结构{
字符版本[10];
int设置;
}配置类型;
配置类型配置={config\u ver,50};
void saveconfig(){
Serial.println(“保存配置!!”);
对于(int i=0;iSerial.print(data);//运算符的优先级有时会有问题。我在这里没有深入研究优先级,但建议使用以下方法来防止出现任何问题:

void saveconfig() {
  Serial.println("Saving configuration!!");
  unsigned char *data = (unsigned char *)&configuration;
  for(int i=0; i < sizeof(configuration); i++, data++) {
    EEPROM.write(i,*data);
  }
}
void saveconfig(){
Serial.println(“保存配置!!”);
无符号字符*数据=(无符号字符*)&配置;
对于(int i=0;i
运算符优先级有时可能会有问题。我在这里没有深入研究优先级,但建议采取以下措施以防止出现任何问题:

void saveconfig() {
  Serial.println("Saving configuration!!");
  unsigned char *data = (unsigned char *)&configuration;
  for(int i=0; i < sizeof(configuration); i++, data++) {
    EEPROM.write(i,*data);
  }
}
void saveconfig(){
Serial.println(“保存配置!!”);
无符号字符*数据=(无符号字符*)&配置;
对于(int i=0;i
ESP32没有EEPROM。它只是闪存中的一个模拟。您需要提交更改以将它们从RAM移动到闪存

添加
EEPROM。在写入初始化EEPROM仿真之前,以适当的大小开始(EEPROM大小)

在写入后添加
EEPROM.commit()
,以将写入提交到闪存

参考官方示例:

请注意,EEPROM已弃用。请改用首选项库


请参见

ESP32没有EEPROM。它只是闪存中的模拟。您需要提交更改,以便将它们从RAM移动到闪存

添加
EEPROM。在写入初始化EEPROM仿真之前,以适当的大小开始(EEPROM大小)

在写入后添加
EEPROM.commit()
,以将写入提交到闪存

参考官方示例:

请注意,EEPROM已弃用。请改用首选项库


请参见

“打印良好”但您正在打印二进制数据。您如何知道它“良好”?@PaulOgilvie我没有收到您的信息。我可以打印一些东西到控制台,但无法将相同的数据保存到EEPROM。!“打印良好”但您正在打印二进制数据。您如何知道它“良好”?@PaulOgilvie我没有理解你的意思。我可以打印一些东西到控制台,但无法将相同的数据保存到EEPROM。!@Pigger我稍后将使用首选项库。添加EEPROM.commit()后,我对上述代码仍有相同的问题;@PraveenKumarPS您必须使用EEPROM.begin初始化EEPROM库。请按照官方示例进行操作。@pigger我稍后将使用首选项库。添加EEPROM.commit()后,上述代码仍然存在相同的问题;@PraveenKumarPS您必须使用EEPROM.begin初始化EEPROM库。请按照官方示例操作。
void saveconfig() {
  Serial.println("Saving configuration!!");
  unsigned char *data = (unsigned char *)&configuration;
  for(int i=0; i < sizeof(configuration); i++, data++) {
    EEPROM.write(i,*data);
  }
}