ESP32 EEPROM.put 的 EEPROM 包装器无法按预期工作

问题描述

我正在为 Arduino 的原始 EEPROM 库编写一个包装器。我想为 EEPROM 磨损均衡开发自己的库,以分块写入数据,如果需要,我的程序会自动附加一个块以延长 EEPROM 的使用寿命。

我最关心的是带有 2 个参数的 EEPROM.put() 函数。 1 - 起始地址 2 - 数据

我为 eeprom_rotate 类构建了一些方法

//CLASS CONSTRUCTOR

eeprom_rotate::eeprom_rotate(size_t size_of_eeprom,size_t chunk_size) {
    EEPROM.begin(size_of_eeprom);
    Serial.println("the class constructor has been created");
    this->size_of_eeprom = size_of_eeprom;
    this->chunk_size = chunk_size;
}





void eeprom_rotate::write_to_chunk(size_t chunk,int data[]){
    EEPROM.put(chunk,data);
    EEPROM.commit();
}

调用函数如下:


  eeprom_rotate eeprom1(50,10);//creates a object constructor eeprom size 50 and chunk size is 10
  int  data_buffer[10] = {1,2,3,4,5,6,7,8,9,10};
  eeprom1.write_to_chunk(0,data_buffer);

所以我正在写入块 0(地址从 0 到 10)并希望我的 EEPROM 具有值 1、2、3、4、5、6、7、8、9、10,但是,这不是情况下,当我检查串行监视器时,值如下:

reading all eeprom
Data in EEPROM(0)= 104
Data in EEPROM(1)= 31
Data in EEPROM(2)= 251
Data in EEPROM(3)= 63
Data in EEPROM(4)= 255
Data in EEPROM(5)= 255
Data in EEPROM(6)= 255
Data in EEPROM(7)= 255
Data in EEPROM(8)= 255
Data in EEPROM(9)= 255
Data in EEPROM(10)= 255
Data in EEPROM(11)= 255
Data in EEPROM(12)= 255
Data in EEPROM(13)= 255
Data in EEPROM(14)= 255
Data in EEPROM(15)= 255
Data in EEPROM(16)= 255
Data in EEPROM(17)= 255
Data in EEPROM(18)= 255
Data in EEPROM(19)= 255
Data in EEPROM(20)= 255
Data in EEPROM(21)= 255
Data in EEPROM(22)= 255
Data in EEPROM(23)= 255
Data in EEPROM(24)= 255
Data in EEPROM(25)= 255
Data in EEPROM(26)= 255
Data in EEPROM(27)= 255
Data in EEPROM(28)= 255
Data in EEPROM(29)= 255
Data in EEPROM(30)= 255
Data in EEPROM(31)= 255
Data in EEPROM(32)= 255
Data in EEPROM(33)= 255
Data in EEPROM(34)= 255
Data in EEPROM(35)= 255
Data in EEPROM(36)= 255
Data in EEPROM(37)= 255
Data in EEPROM(38)= 255
Data in EEPROM(39)= 255
Data in EEPROM(40)= 255
Data in EEPROM(41)= 255
Data in EEPROM(42)= 255
Data in EEPROM(43)= 255
Data in EEPROM(44)= 255
Data in EEPROM(45)= 255
Data in EEPROM(46)= 255
Data in EEPROM(47)= 255
Data in EEPROM(48)= 255
Data in EEPROM(49)= 255

更新

我做了一些进一步的测试,发现了一些有趣的东西。在我的 arduino 主程序中,如果我检查数组的大小:

  uint8_t data_buffer[10] = {1,10};
  Serial.print("size of data buffer =");
  Serial.println(sizeof(data_buffer));
  eeprom1.write_to_chunk(0,data_buffer);

结果将是:

clearing eeprom
size of data buffer =10

但是,当我尝试在我的类方法中打印它时,如下所示:

void eeprom_rotate::write_to_chunk(size_t chunk,uint8_t data_to_write[]){
  Serial.print(ln"printing data to write received = ");
  Serial.println(data_to_write[0]);
  Serial.println(data_to_write[1]);
  Serial.println(data_to_write[2]);
  Serial.println(data_to_write[3]);
  Serial.println(data_to_write[4]);
  Serial.println(data_to_write[5]);
  Serial.println(data_to_write[6]);
  Serial.println(data_to_write[7]);
  Serial.println(data_to_write[8]);
  Serial.println(data_to_write[9]);
  Serial.print("size of data to write= ");
  Serial.println(sizeof(data_to_write));

    EEPROM.put(chunk,data_to_write);
    Serial.println("printing after put");
    for(int i = 0; i<size_of_eeprom;i++){
      Serial.println(EEPROM.read(i));
    }
}


结果如下:

printing data to write received = 1
2
3
4
5
6
7
8
9
10
size of data to write= 4
printing after put
130
31
251
63
255
255
255
255
255
255
255
255

由于某种原因,即使我传递的数组大小为 10,函数内部数组的大小也是 4。这解释了为什么它只写入 EEPROM 的前 4 个地址。但是,我仍然不完全清楚这里有什么问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)