将对象写入和读取 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() {}