先上配置:
FAL
/* ===================== Flash device Configuration ========================= */
extern const struct fal_flash_dev stm32_onchip_flash;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&stm32_onchip_flash \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "easyflash", "onchip_flash", 120*1024, 8*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
flashDB
/* using KVDB feature */
#define FDB_USING_KVDB
extern void rt_kprintf(const char *fmt, ...);
#define FDB_PRINT(...) rt_kprintf(__VA_ARGS__)
/* print debug information */
#define FDB_DEBUG_ENABLE
初始化启动

重启写入数据



通过下面的配置,解决了错误问题:

估计错误产生的原因:默认的扇区大小为1024字节,而我写入的字节数量超过了1024字节(超过了一个扇区),从而需要跨扇区存储。

按照flashDB的说明:
flashDB内部有N个扇区组成(至少有1个)
1个扇区由N个Flash块组成
KVDB默认情况下:
1个Flash块=1个扇区
此时如果存储的数据长度超过了1个扇区大小,那么就无法存入(我的flash块大小为1024字节=1扇区,我存入的数据是超过1k的)。那么此时怎么办?
修改1个扇区占用的flash块数量:secSize = 10244//设置1个扇区占4个flash块
得到如下结论:
*使用flashDB KVDB(其他类型未测试)存储数据时,要知道你存储的数据大体是多少字节,要是否超过了1个扇区的存储能力
那么现在的问题就有点意思了:
FlashDB有N个扇区,但是KVDB在存储时又要求存储的数据不能超过1个扇区的大小;那么此时剩下的N-1个扇区用来做什么用呢?????????????????????