Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
将对象写入和读取到esp32闪存中,arduino_Arduino_Esp32 - Fatal编程技术网

将对象写入和读取到esp32闪存中,arduino

将对象写入和读取到esp32闪存中,arduino,arduino,esp32,Arduino,Esp32,我正在尝试将封装到对象中的一些数据存储在ESP32的闪存中 似乎通过putBytes将对象写入内存效果不错,但我不知道如何读取它 我尝试这样做的方式不起作用 #包括 eeprom; 类型定义结构{ 长var1=-1; 长var2=-1; 长var3=0; 字节var4=0; }某物; someObject_u4][24]; someobjectobject_1_[4][24]; 无效设置(){ 序列号开始(115200); eeprom。开始(“设置”,错误); 对象[0][0].var1=25

我正在尝试将封装到对象中的一些数据存储在ESP32的闪存中

似乎通过
putBytes
将对象写入内存效果不错,但我不知道如何读取它

我尝试这样做的方式不起作用

#包括
eeprom;
类型定义结构{
长var1=-1;
长var2=-1;
长var3=0;
字节var4=0;
}某物;
someObject_u4][24];
someobjectobject_1_[4][24];
无效设置(){
序列号开始(115200);
eeprom。开始(“设置”,错误);
对象[0][0].var1=25889;
对象[0][0].var2=25890;
对象[0][0].var3=25891;
对象[1][2].var1=25892;
对象[1][2].var2=25893;
对象[1][2].var3=25894;
eeprom.putBytes(“someObject”、&object_[4][24],sizeof(object_[4][24]);
Serial.print(“sizeof(object[4][24])=”;Serial.println(String(sizeof(object[4][24]));
size\u t schLen=eeprom.getBytes(“someObject”,NULL,NULL);
Serial.print(“sizeof(someObject)=”);Serial.println(String(schLen));
字符缓冲区[schLen];
eeprom.getBytes(“someObject”&object_1_[4][24],schLen);//我知道使用“&”是错误的,但我不知道如何修复它
Serial.println(“----------**********************************************”);
Serial.println(字符串(object[0][0].var1));
Serial.println(字符串(object[0][0].var2));
Serial.println(字符串(object[0][0].var3));
序列号。打印号(“----------”);
Serial.println(字符串(object_1_[1][2].var1));
Serial.println(字符串(object_1_[1][2].var2));
Serial.println(字符串(object_1_[1][2].var3));
Serial.println(“================================================================”);
串行打印LN(缓冲区);
}
void loop(){}

提前感谢您的任何想法

与Preferences()的示例用法类似,在转换到结构之前,需要将字节读入缓冲区

在您的情况下,您正在声明缓冲区,但从未使用它。因为您知道数组的确切大小,所以应该能够直接将它从
缓冲区
复制到
对象

char缓冲区[schLen];//为数据准备缓冲区
eeprom.getBytes(“someObject”,buffer,schLen);
memcpy(对象、缓冲区、schLen);

与Preferences()的示例用法类似,在转换为结构之前,需要将字节读入缓冲区

在您的情况下,您正在声明缓冲区,但从未使用它。因为您知道数组的确切大小,所以应该能够直接将它从
缓冲区
复制到
对象

char缓冲区[schLen];//为数据准备缓冲区
eeprom.getBytes(“someObject”,buffer,schLen);
memcpy(对象、缓冲区、schLen);

谢谢你的帮助!工作代码:

#包括
eeprom;
类型定义结构{
长var1=-1;
长var2=-1;
长var3=0;
字节var4=0;
}某物;
someObject_u4][24];
someobjectobject_1_[4][24];
无效设置(){
序列号开始(115200);
eeprom。开始(“设置”,错误);
对象[0][0].var1=25889;
对象[0][0].var2=25890;
对象[0][0].var3=25891;
对象[1][2].var1=25892;
对象[1][2].var2=25893;
对象[1][2].var3=25894;
eeprom.putBytes(“someObject”、&object_、sizeof(object_));
Serial.print(“sizeof(object_)=”);Serial.println(String(sizeof(object_));
size\u t schLen=eeprom.getBytes(“someObject”,NULL,NULL);
char buffer[schLen];//为数据准备一个缓冲区
eeprom.getBytes(“someObject”,buffer,schLen);
memcpy(object_1_,buffer,schLen);
Serial.print(“sizeof(someObject)=”);Serial.println(String(schLen));
Serial.println(“----------**********************************************”);
Serial.println(字符串(object[0][0].var1));
Serial.println(字符串(object[0][0].var2));
Serial.println(字符串(object[0][0].var3));
序列号。打印号(“----------”);
Serial.println(字符串(object_1_[1][2].var1));
Serial.println(字符串(object_1_[1][2].var2));
Serial.println(字符串(object_1_[1][2].var3));
Serial.println(“================================================================”);
串行打印LN(缓冲区);
}
void loop(){}

谢谢你的帮助!工作代码:

#包括
eeprom;
类型定义结构{
长var1=-1;
长var2=-1;
长var3=0;
字节var4=0;
}某物;
someObject_u4][24];
someobjectobject_1_[4][24];
无效设置(){
序列号开始(115200);
eeprom。开始(“设置”,错误);
对象[0][0].var1=25889;
对象[0][0].var2=25890;
对象[0][0].var3=25891;
对象[1][2].var1=25892;
对象[1][2].var2=25893;
对象[1][2].var3=25894;
eeprom.putBytes(“someObject”、&object_、sizeof(object_));
Serial.print(“sizeof(object_)=”);Serial.println(String(sizeof(object_));
size\u t schLen=eeprom.getBytes(“someObject”,NULL,NULL);
char buffer[schLen];//为数据准备一个缓冲区
eeprom.getBytes(“someObject”,buffer,schLen);
memcpy(object_1_,buffer,schLen);
Serial.print(“sizeof(someObject)=”);Serial.println(String(schLen));
Serial.println(“----------**********************************************”);
Serial.println(字符串(object[0][0].var1));
Serial.println(字符串(object[0][0].var2));
Serial.println(字符串(object[0][0].var3));
序列号。打印号(“----------”);
Serial.println(字符串(object_1_[1][2].var1));
Serial.println(字符串(object_1_[1][2].var2));
Serial.println(字符串(object_1_[1][2].var3));
Serial.println(“================================================================”);
串行打印LN(缓冲区);
}
void loop(){}

您的
getBytes
调用不应该先将字节写入缓冲区吗?看:AniSkywalker,谢谢你的回复!我使用您发送的示例来编写代码。但我很难理解他们为什么在写对象之前使用数组。。。我很高兴我能帮上忙!不要忘记标记有帮助的解决方案,以便其他人也能找到答案。您的
getBytes
调用不应该先将字节写入缓冲区吗?s