RT-Thread论坛
直播中

自我清欢

10年用户 1059经验值
擅长:可编程逻辑 模拟技术 EMC/EMI设计 光电显示 存储技术
私信 关注
[问答]

FlashDb在F103上使用报错的原因?

先上配置:
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个扇区用来做什么用呢?????????????????????


更多回帖

×
20
完善资料,
赚取积分