armink / EasyFlash

Lightweight IoT device information storage solution: KV/IAP/LOG. | 轻量级物联网设备信息存储方案:参数存储、在线升级及日志存储 ,全新一代版本请移步至 https://github.com/armink/FlashDB
MIT License
1.99k stars 760 forks source link

ef_log: erase sector时发生复位或下电,重启时会丢失所有log #151

Open CutClassH opened 1 year ago

CutClassH commented 1 year ago

find_start_and_end_addr函数,358行和373行有如下的逻辑,发现setor status是错误,会调用ef_log_clean。

case SECTOR_STATUS_HEADER_ERROR: EF_DEBUG("Error: Log sector header error! Now will clean all log area.\n"); ef_log_clean(); return;

如果在调用ef_log_write 写入log的过程中,刚好在ef_port_erase时复位或掉电,此时有一个sector的内容为全FFFF(或没擦完内容错误),再次上电时会吧整个log都清除了。 在log区域写满的情况下继续写入log(因为会经常erase setor),这个log全部丢失的问题出现的概率会很大。 是否考虑针对此场景,修改一下find_start_and_end_addr函数的逻辑?

saviourxx commented 1 year ago

我也遇到缓慢掉电,会丢失所有ENV数据。。。