You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPP中读取EEPROM返回二维数组第二个元素数据丢失问题

问题根因

你在getConfigForEeprom函数中对第二组数据的存储下标逻辑存在错误:

  • EEPROM地址32~63存储的是第二组密码数据,你读取时直接把EEPROM的偏移地址j(值为32到63)作为valueEeprom[1]的数组下标,相当于把数据存在了valueEeprom[1][32]到valueEeprom[1][63]的位置
  • 而dumbDataEeprom函数打印第二组数据时,仅读取valueEeprom[1][0]到valueEeprom[1][31]的位置,这部分位置你没有做任何赋值操作,自然全部为初始0值。
  • 额外问题:你给每个一维数组分配了64字节(BYTES_NEEDED_FROM_EEPROM值为64),但实际每个参数仅需要32字节,属于多余的内存分配。
修复方案

1. 修正二维数组分配大小

每个参数仅需32字节,修改getConfigForEeprom中的数组初始化代码:

for (uint8_t m = 0; m < PARAMETERS_EEPROM; m++){
    // 把原本的BYTES_NEEDED_FROM_EEPROM替换为PARAMETER_SIZE_IN_BYTES
    valueEeprom[m] = new uint8_t[PARAMETER_SIZE_IN_BYTES];
}

2. 修正第二组数据的赋值下标逻辑

读取EEPROM中3263地址的数据时,转换为`valueEeprom[1]`的031下标:

// 原第二组数据读取逻辑替换为下面的代码
for(uint8_t j = 0; j < PARAMETER_SIZE_IN_BYTES; j ++ ) {
    // EEPROM地址偏移PARAMETER_SIZE_IN_BYTES,数组下标从0开始计数
    valueEeprom[1][j] = EEPROM.read(j + PARAMETER_SIZE_IN_BYTES);
    Serial.println(valueEeprom[1][j]);
}
额外优化建议

你当前通过new申请的二维数组内存没有释放,会造成内存泄漏,建议在dumbDataEeprom调用完成后添加内存释放逻辑:

// main.cpp中调用完dumbDataEeprom后添加以下代码
for (uint8_t i = 0; i < PARAMETERS_EEPROM; i++) {
    delete[] valuesOutEeprom[i];
}
delete[] valuesOutEeprom;

内容的提问来源于stack exchange,提问作者Stefan de Kraker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:57:02