将对象写入和读取 esp32 闪存,arduino
writing and reading object into esp32 flash memory, arduino
我正在尝试将一些封装到对象中的数据存储在ESP32的闪存中。
好像putBytes
把object写进内存还不错,就是不知道怎么读
我尝试这样做的方法不起作用...
#include <Preferences.h>
Preferences eeprom;
typedef struct {
long var1 = -1;
long var2 = -1;
long var3 = 0;
byte var4 = 0;
} someObject;
someObject object_[4][24];
someObject object_1_[4][24];
void setup() {
Serial.begin(115200);
eeprom.begin("Settings", false);
object_[0][0].var1 = 25889;
object_[0][0].var2 = 25890;
object_[0][0].var3 = 25891;
object_[1][2].var1 = 25892;
object_[1][2].var2 = 25893;
object_[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_t schLen = eeprom.getBytes("someObject", NULL, NULL);
Serial.print("sizeof(someObject) = "); Serial.println(String(schLen));
char buffer[schLen];
eeprom.getBytes("someObject", &object_1_[4][24], schLen); // I know use of "&" is wrong, but havn't idea to fix it
Serial.println("--------**********************************");
Serial.println(String(object_[0][0].var1));
Serial.println(String(object_[0][0].var2));
Serial.println(String(object_[0][0].var3));
Serial.println("--------");
Serial.println(String(object_1_[1][2].var1));
Serial.println(String(object_1_[1][2].var2));
Serial.println(String(object_1_[1][2].var3));
Serial.println("===========================================");
Serial.println(buffer);
}
void loop() {}
提前感谢任何想法!
与首选项 (https://github.com/espressif/arduino-esp32/blob/master/libraries/Preferences/examples/Prefs2Struct/Prefs2Struct.ino) 的示例用法一样,您需要在转换为结构之前将字节读入缓冲区。
在你的例子中,你声明了缓冲区但从未使用过它。由于您知道数组的确切大小,因此您应该能够直接将其从 buffer
复制到 object_
。
char buffer[schLen]; // prepare a buffer for the data
eeprom.getBytes("someObject", buffer, schLen);
memcpy(object_, buffer, schLen);
感谢您的帮助!工作代码:
#include <Preferences.h>
Preferences eeprom;
typedef struct {
long var1 = -1;
long var2 = -1;
long var3 = 0;
byte var4 = 0;
} someObject;
someObject object_[4][24];
someObject object_1_[4][24];
void setup() {
Serial.begin(115200);
eeprom.begin("Settings", false);
object_[0][0].var1 = 25889;
object_[0][0].var2 = 25890;
object_[0][0].var3 = 25891;
object_[1][2].var1 = 25892;
object_[1][2].var2 = 25893;
object_[1][2].var3 = 25894;
eeprom.putBytes("someObject", &object_, sizeof(object_));
Serial.print("sizeof(object_) = "); Serial.println(String(sizeof(object_)));
size_t schLen = eeprom.getBytes("someObject", NULL, NULL);
char buffer[schLen]; // prepare a buffer for the data
eeprom.getBytes("someObject", buffer, schLen);
memcpy(object_1_, buffer, schLen);
Serial.print("sizeof(someObject) = "); Serial.println(String(schLen));
Serial.println("--------**********************************");
Serial.println(String(object_[0][0].var1));
Serial.println(String(object_[0][0].var2));
Serial.println(String(object_[0][0].var3));
Serial.println("--------");
Serial.println(String(object_1_[1][2].var1));
Serial.println(String(object_1_[1][2].var2));
Serial.println(String(object_1_[1][2].var3));
Serial.println("===========================================");
Serial.println(buffer);
}
void loop() {}
我正在尝试将一些封装到对象中的数据存储在ESP32的闪存中。
好像putBytes
把object写进内存还不错,就是不知道怎么读
我尝试这样做的方法不起作用...
#include <Preferences.h>
Preferences eeprom;
typedef struct {
long var1 = -1;
long var2 = -1;
long var3 = 0;
byte var4 = 0;
} someObject;
someObject object_[4][24];
someObject object_1_[4][24];
void setup() {
Serial.begin(115200);
eeprom.begin("Settings", false);
object_[0][0].var1 = 25889;
object_[0][0].var2 = 25890;
object_[0][0].var3 = 25891;
object_[1][2].var1 = 25892;
object_[1][2].var2 = 25893;
object_[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_t schLen = eeprom.getBytes("someObject", NULL, NULL);
Serial.print("sizeof(someObject) = "); Serial.println(String(schLen));
char buffer[schLen];
eeprom.getBytes("someObject", &object_1_[4][24], schLen); // I know use of "&" is wrong, but havn't idea to fix it
Serial.println("--------**********************************");
Serial.println(String(object_[0][0].var1));
Serial.println(String(object_[0][0].var2));
Serial.println(String(object_[0][0].var3));
Serial.println("--------");
Serial.println(String(object_1_[1][2].var1));
Serial.println(String(object_1_[1][2].var2));
Serial.println(String(object_1_[1][2].var3));
Serial.println("===========================================");
Serial.println(buffer);
}
void loop() {}
提前感谢任何想法!
与首选项 (https://github.com/espressif/arduino-esp32/blob/master/libraries/Preferences/examples/Prefs2Struct/Prefs2Struct.ino) 的示例用法一样,您需要在转换为结构之前将字节读入缓冲区。
在你的例子中,你声明了缓冲区但从未使用过它。由于您知道数组的确切大小,因此您应该能够直接将其从 buffer
复制到 object_
。
char buffer[schLen]; // prepare a buffer for the data
eeprom.getBytes("someObject", buffer, schLen);
memcpy(object_, buffer, schLen);
感谢您的帮助!工作代码:
#include <Preferences.h>
Preferences eeprom;
typedef struct {
long var1 = -1;
long var2 = -1;
long var3 = 0;
byte var4 = 0;
} someObject;
someObject object_[4][24];
someObject object_1_[4][24];
void setup() {
Serial.begin(115200);
eeprom.begin("Settings", false);
object_[0][0].var1 = 25889;
object_[0][0].var2 = 25890;
object_[0][0].var3 = 25891;
object_[1][2].var1 = 25892;
object_[1][2].var2 = 25893;
object_[1][2].var3 = 25894;
eeprom.putBytes("someObject", &object_, sizeof(object_));
Serial.print("sizeof(object_) = "); Serial.println(String(sizeof(object_)));
size_t schLen = eeprom.getBytes("someObject", NULL, NULL);
char buffer[schLen]; // prepare a buffer for the data
eeprom.getBytes("someObject", buffer, schLen);
memcpy(object_1_, buffer, schLen);
Serial.print("sizeof(someObject) = "); Serial.println(String(schLen));
Serial.println("--------**********************************");
Serial.println(String(object_[0][0].var1));
Serial.println(String(object_[0][0].var2));
Serial.println(String(object_[0][0].var3));
Serial.println("--------");
Serial.println(String(object_1_[1][2].var1));
Serial.println(String(object_1_[1][2].var2));
Serial.println(String(object_1_[1][2].var3));
Serial.println("===========================================");
Serial.println(buffer);
}
void loop() {}