EasyFlash icon indicating copy to clipboard operation
EasyFlash copied to clipboard

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

Results 59 EasyFlash issues
Sort by recently updated
recently updated
newest added
trafficstars

Hi Armink, 在我们应用需要经常对某个特殊的KV对进行写入,类似于counter写入性质的,counter值每增加1就写需要写入1次。这种情况下每次写入是可能需要花大量的时间去Flash搜索找到这个Key,然后再进行写入。是否支持对于这种特殊的KV对,每次写入完成后存储最后一次的地址,索引信息,使得下一次数据写入时更加快速查找。 另外我们要存储的KV对是一个结构体数组,可能需要对数组的里面某个下标i进行写入,是否支持基于offset方式对某个KV的特定index数据进行写入。 谢谢。

当所有的sector都校验失败的时候(比如格式化flash),初始化easyflash会两次重复format_sector()所有sector。

当 Key 不存在的情况下,现有的逻辑是要遍历所有扇区的每一个 ENV 才能确定是不存在的

能弄个裸机的IAP例程吗 IAP目前只看到RTT的

原本使用 easyflash保存环境变量和日志到w25q16,经过移植虽然实现了功能,但是读取、设置单个环境变量都会消耗大量时间导致系统阻塞,读大约消耗140ms,写大约400ms。虽然知道w25q16芯片写入数据前若目标地址数据不为0xFF会进行擦除扇区的操作,擦除单个扇区的时间在40~100ms。但是读环境变量也会消耗140ms,这是真的不能忍。 而且设置单个环境变量会导致多次写入操作大幅增加时间消耗。延迟高的问题不知是不是我移植的有问题,希望能够优化对W25qXX芯片的支持,不然实时性要求高一点的情况都没法用easyflash。

https://github.com/armink/EasyFlash/blob/ef3556f2026f7af6be2408d2cd9b4c5726d98df4/easyflash/src/ef_env.c#L1074 此处的代码会宏展开ENV_STATUS_TABLE_SIZE 和DIRTY_STATUS_TABLE_SIZE,而他们会分别使用枚举变量:ENV_STATUS_NUM和SECTOR_DIRTY_STATUS_NUM。而枚举变量在宏展开时是没法使用的,一般编译器会自动把ENV_STATUS_NUM和SECTOR_DIRTY_STATUS_NUM设置为0,因此#if (ENV_STATUS_TABLE_SIZE >= DIRTY_STATUS_TABLE_SIZE)始终为真,从而导致: uint8_t status_table[ENV_STATUS_TABLE_SIZE];语句永久有效; uint8_t status_table[DIRTY_STATUS_TABLE_SIZE];语句无法有效。

调用 log_seq_read 读取 8192 字节长度的数据,会少读取12个字节。 原函数实现: ``` static EfErrCode log_seq_read(uint32_t addr, uint32_t *log, size_t size) { EfErrCode result = EF_NO_ERR; size_t read_size = 0, read_size_temp = 0; while (size) {...

- 0> [Flash](..\app\easyflash\src\ef_env.c:1370) Trigger a GC check after created ENV. - 0> [Flash](..\app\easyflash\src\ef_env.c:1266) The remain empty sector is 0, GC threshold is 1. - 0> [Flash](..\app\easyflash\src\ef_env.c:1246) Collect a sector @0x0801E800...

执行函数sector_iterator(&sector, SECTOR_STORE_UNUSED, &check_failed_count, NULL, check_sec_hdr_cb, false);掉进check_sec_hdr_cb里面输出Warning: Sector header check failed. Format this sector (0x00000000). 是驱动的问题导致无法访问sector吗?驱动单独用SFUD读写擦除是OK的. 请大神帮忙分析下.

请教下,看代码v3.3,我想把它用在eeprom。 发现 负载均衡 体现在 ef_save_env 中 , erase失败和 write失败的情况下,erase下一个扇区或者 write 到 下一个扇区去。 这样的话,如果erase和 write没有失败,永远在一个个往下写的。 也就是所,这个负载均衡 其实是 坏块产生后的异常处理。这和 我理解的负载均衡不太一样(我理解的是 写之前尽量让写入分散到各个扇区,防止坏块提早产生)。 不知道我的理解对吗?