FlashDB 占用约 7KB Flash 时,固定配置可考虑 A/B 双页存储

FlashDB 是面向嵌入式设备的数据库组件。KVDB 用键值对保存配置,适合 key 会增加、更新较频繁、需要遍历或删除数据的场景;它同时提供 GC、磨损均衡和掉电恢复等能力。

A/B 双页存储使用两个独立 Flash 擦除页保存同一份固定结构体。写入中断或主副本校验失败时,程序可以读取另一页,适合数据少、结构稳定、更新频率低的设备配置。

FlashDB 的 7KB 代码占用

以下数据来自 Cortex-M0+ 在 -Os -flto 下的编译结果,仅开启 KVDB 与 FAL。这个数字用于说明当前工程的资源量级,不代表所有芯片和工具链都会得到相同结果。

模块 主要代价来源 约 Flash 占用
fdb_kvdb.c 扇区管理、追加写、GC 回收、迭代器 ~3KB
fdb_utils.c CRC32、状态字操作 ~1.5KB
fdb.c 数据库公共接口 ~0.5KB
FAL 层 分区表、设备管理、Flash 操作封装 ~2KB
合计 ~7KB

这 7KB 购买的是完整 KV 存储能力。项目仅保存几十字节固定配置时,其中很多能力用不上;配置持续增长或需要频繁维护时,这些能力可以降低应用层复杂度。

A/B 双页与 FlashDB 的选型差异

选型维度 A/B 双页存储 FlashDB KVDB
数据模型 固定结构体或固定二进制块 key-value,条目可独立增删
写入方式 整块擦除、整块更新 追加写入,由 GC 回收空间
掉电恢复 两份副本校验与回退 数据库状态管理与恢复机制
磨损管理 应用自行控制写入频率 提供 GC 和磨损均衡能力
版本迁移 应用处理结构体版本 可按 key 补充或更新默认值
外部管理 需要自定义字段映射 key 适合查询、修改和导出
资源代价 两个擦除页和少量代码 当前最小配置约 7KB 代码

数据字节数只能作为一个判断维度。固定结构体即使接近 1KB,也可能适合 A/B;几十字节配置如果每个字段都要独立管理、频繁更新,FlashDB 仍有价值。

选型边界

选择 A/B 双页存储,需要同时满足这些条件:

选择 FlashDB,通常是因为配置已经形成动态 KV 集合,写入和升级需求持续增加。此时 7KB 左右的代码代价换来了统一的数据管理、空间回收和恢复机制,项目不必继续扩展自写存储层。

实际选择可以压缩成一句话:固定、低频、整块更新优先 A/B;动态、频繁、按 key 管理优先 FlashDB。

A/B 双页实现、Air001 接入方式和掉电边界见 用 A/B 双页冗余保存 MCU 固定配置

本文由 AI 辅助生成,可能存在错误或遗漏,请以实际资料和官方文档为准。