演示工程详细说明

    演示工程中, 中的 main 函数 为入口函数,该函数分为两段,分别初始化了一个 KVDB 和 TSDB 对象,然后执行与之对应的示例函数,大致内容如下:

    设置加锁与解锁

    初始化 KVDB 及 TSDB 前通常需要通过 control 函数设置 加锁回调解锁回调

    • KVDB:
      • fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_LOCK, lock);
    • TSDB:
      • fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_LOCK, lock);
      • fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_UNLOCK, unlock);

    对于裸机平台,加锁与解锁回调通常设置为关中断与开中断函数。而 RTOS 平台一般使用 mutex 互斥锁或 二值信号量 的 take 及 release 动作作为加锁与解锁的方式。

    模拟时间戳

    所以,使用这种方法模拟的时间戳没有实时时间的含义,只是为了让每条记录插入的时间戳不重复。

    示例

    本文主要讲解初始化相关代码功能,更多关于示例函数的详细讲解,请阅读对应的示例详解。

    下面将对日志进行分段讲解。

    1. [D/FAL] (fal_flash_init:65) Flash device | stm32_onchip | addr: 0x08000000 | len: 0x00040000 | blk_size: 0x00000800 |initialized finish.
    2. [I/FAL] ==================== FAL partition table ====================
    3. [I/FAL] -------------------------------------------------------------
    4. [I/FAL] | fdb_tsdb1 | stm32_onchip | 0x0001a000 | 0x00002000 |
    5. [I/FAL] | fdb_kvdb1 | stm32_onchip | 0x0001c000 | 0x00004000 |
    6. [I/FAL] =============================================================
    7. [I/FAL] Flash Abstraction Layer (V0.5.0) initialize success.

    KVDB 每次初始化时会检查扇区头部信息是否正确(扇区头部存储了一些属性信息),如果不正确,将会自动格式化该扇区。

    Flash 首次使用时,通常需要格式化处理,所以首次初始化时的日志会含有格式化的信息。格式化成功后,后续每次初始化无需再次格式化。

    与 KVDB 类似,TSDB 首次初始化时,也会自动执行格式化动作。

    1. [FlashDB][tsl][log] Sector (0x00000000) header info is incorrect.
    2. [FlashDB][tsl][log] All sector format finished.

    这里主要看下 KVDB 与 TSDB 初始化的日志,对比首次初始化可以发现,第二次启动时的初始化日志会相对少很多,主要少了格式化的过程。

    1. [D/FAL] (fal_flash_init:65) Flash device | stm32_onchip | addr: 0x08000000 | len: 0x00040000 | blk_size: 0x00000800 |initialized finish.
    2. [I/FAL] ==================== FAL partition table ====================
    3. [I/FAL] -------------------------------------------------------------
    4. [I/FAL] | fdb_tsdb1 | stm32_onchip | 0x0001a000 | 0x00002000 |
    5. [I/FAL] | fdb_kvdb1 | stm32_onchip | 0x0001c000 | 0x00004000 |
    6. [I/FAL] =============================================================
    7. [I/FAL] Flash Abstraction Layer (V0.5.0) initialize success.
    8. [FlashDB][kv][env] (D:/Program/STM32/FlashDB/src/fdb_kvdb.c:1599) KVDB in partition fdb_kvdb1, size is 16384 bytes.
    9. [FlashDB] FlashDB V1.0.0 beta is initialize success.
    10. [FlashDB] You can get the latest version on https://github.com/armink/FlashDB .
    11. 省略示例运行日志……
    12. [FlashDB][tsl][log] (D:/Program/STM32/FlashDB/src/fdb_tsdb.c:759) TSDB (log) oldest sectors is 0x00000000, current using sector is 0x00000000.