armink / EasyFlash

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

size_t ef_log_get_used_size(void) 函数返回值是负值 #96

Open Aslm opened 4 years ago

Aslm commented 4 years ago

原语句是:header_total_num = (physical_size / EF_ERASE_MIN_SIZE) + 1; 修改后是:header_total_num = (physical_size % EF_ERASE_MIN_SIZE) + 1;

在执行原语句的时候 physical_size / EF_ERASE_MIN_SIZE 是会计算错误(本台是STM32F072、MDK)。 作者的本意是计算扇区使用多少个吧。

armink commented 4 years ago

physical_size / EF_ERASE_MIN_SIZE 是会计算错误(本台是STM32F072、MDK)

具体是什么错误?

Aslm commented 4 years ago

感谢回答,今天重新配置了页大小

define PAGE_SIZE 1024

define EF_ERASE_MIN_SIZE (4U * PAGE_SIZE)

-->

define PAGE_SIZE 2048

define EF_ERASE_MIN_SIZE (2U * PAGE_SIZE)

新参数运行正常了。 奇怪的是 physical_size / EF_ERASE_MIN_SIZE 的结果在我的原设置下是很大的数。

chc0chc commented 10 months ago

这个我也踩坑了,配置这个EF_ERASE_MIN_SIZE宏参数忘记加括号ef_log_get_used_size()读出来有问题