Repository navigation
[功能建议] 请求支持 FDB_WRITE_GRAN 配置为 128 (最小16字节颗粒度),适配 STM32H5 等新平台 #397
Description
Activity
你好,现在应该是支持 128 bit 写粒度的,可以在 fdb_cfg.h 进行配置,请问你是遇到了什么问题呢?
确实是 TSDB 还不支持 64 128 bit 写粒度,你可以试着加一下?参考 KVDB
好的,我先试着加一下。感谢您的支持,
@armink 您好,
感谢您的指导和信任!参考您提到的 KVDB 实现逻辑,我已经完成了 TSDB 模块对 FDB_WRITE_GRAN 128 (16字节) 粒度的适配开发。
相关代码已提交至 MR [https://github.com//pull/398]主要改动包括:
更新了写入对齐检查逻辑,以支持 16 字节粒度;
确保了在 STM32H5 等强对齐要求平台上的兼容性。麻烦您在方便时帮忙 Review 一下。如果代码没有问题,不知近期是否方便合入主干并发布一个新版本?这样我们项目就能尽快用上这个特性,也能让更多受限于 Flash 硬件特性的用户受益。
再次感谢 FlashDB 带来的便利!已经合入啦,感谢你的 PR 贡献哈~~
Reacted by Oliver0927iHi @Oliver0927i ,我尝试给 FlashDB 增加了各种写粒度的自动化测试用例(详见 #399 )。但在自动化测试的过程中发现,当写粒度等于:
- 64bit
- 128bit
时,自动化测试会失败。我在模拟器上手动跑了一下有如下一些错误
错误1,
test_tsdb_data_by_time用例失败:
错误2,
test_fdb_tsl_iter_by_time_1用例失败:
错误3,错误2导致了系统宕机,可能哪里有非法内存访问的情况
你看方便查找下具体的问题原因嘛?最好在模拟器上开启类似 KASAN 等内存检测工具,提前侦测到非法访问的调用栈
@armink 好的,我看下
hello @armink
关于当写粒度等于:64bit 和 128bit时,自动化测试会失败的问题。经过初步分析,找到了两个原因:- test_fdb_tsl_iter_by_time_1 case 在append数据的时候,应该保持 TEST_TIME_STEP 整除的时间戳数量,但实际数据库中并不一定有这些时间戳对应的数据节点。当颗粒度为64或者128时,数据库会被覆盖。我适当的减少append次数,case测试通过
2. 当设置颗粒度为128时,我屏蔽掉KVDB里面的这几个 test casse,测试通过
麻烦您看一下,感谢您的时间。我会继续增加更多的测试,希望能早日发版本~
TSDB 测试失败的问题已经修好了 02c0db9
Reacted by Oliver0927iKVDB 测试失败的问题也已经修复好了 db383a1
Reacted by Oliver0927iLOG_IDX_PADDING_SIZE 为啥要用枚举,直接用宏定义可以吗?
LOG_IDX_PADDING_SIZE 的值依赖于 sizeof,而 sizeof 只能在编译阶段求值,不能在预处理阶段用。最后结果就是结构体里没有定义padding数组
@armink 这样可以了
OK,已经合并啦
新版本 v2.2.0 也已经发布 https://github.com/armink/FlashDB/releases/tag/2.2.0









@armink 您好,
首先非常感谢您开发并维护 FlashDB 这个优秀的开源项目!它在我们的多个嵌入式项目中提供了稳定可靠的存储方案,帮我们节省了大量开发时间。
此次提 Issue 是想咨询一下,TSDB 模块未来是否有计划支持 FDB_WRITE_GRAN 配置为 128 (即 16 字节写入粒度)?
背景说明:
我们目前的项目正在迁移到 STM32H563ZI 平台。由于该系列 MCU 的 Flash 控制器 ECC 校验机制以及我们使用的底层驱动优化策略(为了减少固件体积和简化逻辑),底层驱动强制要求 Flash 的写入地址和长度必须严格 16 字节对齐。如果传入非 16 字节倍数的长度,驱动会直接报错。
当前问题:
目前 FlashDB 的 TSDB 配置中,FDB_WRITE_GRAN 最大似乎仅支持到 64 (8 字节)。当我们尝试将其配置为 128 以适配硬件约束时,发现现有逻辑可能无法兼容或不被支持。
诉求与建议:
想请教您:
后续版本是否有计划将 FDB_WRITE_GRAN 的支持范围扩展到 128?
我们非常希望能继续在该项目上使用 TSDB 功能,如果能得到您的指导或支持,我们将不胜感激。
期待您的回复,祝好!