【FlashDB】第三步 FlashDB 移植 STM32L475 使用QSPI驱动外部 flash W25Q64之 FlashDB 移植

准备事项

完成了以下两步操作后进行
【FlashDB】第一步 FlashDB 移植到 STM32L475 使用QSPI驱动外部 flash W25Q64之FAL移植
【FlashDB】第二步 FlashDB 移植 STM32L475 使用QSPI驱动外部 flash W25Q64之 SFUD 移植

貌似以上两步顺序搞反了

1. FlashDB 移植

1.1 将FlashDB 相关文件文件依次放入MDK中

FlashDB 库链接
在这里插入图片描述
1.2红框中是移植必须文件

  • fdb.c 核心文件
  • fdb_kvdb.c 键值数据库核心文件
  • fdb.tsdb.c 时序数据库核心文件
  • fdb.util.c fdb接口文件相关校验文件

1.3 FlashDB 移植

因为 FlashDB 移植所需的接口文件是基于FAL做的,如果我们做好开头两步操作,讲不用关心接口移植

2. FlashDB 测试实例

2.1 键值数据库 初始化

/* KVDB object */
static struct fdb_kvdb kvdb = { 0 };

/*##以下代码放入main中##*/
	#ifdef FDB_USING_KVDB
			{ /* KVDB Sample */
					struct fdb_default_kv default_kv;

					default_kv.kvs = default_kv_table;
					default_kv.num = sizeof(default_kv_table) / sizeof(default_kv_table[0]);
					/* set the lock and unlock function if you want */
					fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_LOCK, lock);
					fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_UNLOCK, unlock);
					/* Key-Value database initialization
					 *
					 *       &kvdb: database object
					 *       "env": database name
					 * "fdb_kvdb1": The flash partition name base on FAL. Please make sure it's in FAL partition table.
					 *              Please change to YOUR partition name.
					 * &default_kv: The default KV nodes. It will auto add to KVDB when first initialize successfully.
					 *        NULL: The user data if you need, now is empty.
					 */
					result = fdb_kvdb_init(&kvdb, "env", "KVDB", &default_kv, NULL);

					if (result != FDB_NO_ERR) {
							return -1;
					}

					/* run basic KV samples */
					kvdb_basic_sample(&kvdb);
					/* run string KV samples */
					kvdb_type_string_sample(&kvdb);
					/* run blob KV samples */
					kvdb_type_blob_sample(&kvdb);
			}
	#endif /* FDB_USING_KVDB */

注意:
函数:result = fdb_kvdb_init(&kvdb, “env”, “KVDB”, &default_kv, NULL);
中的第三个参数 “KVDB” 是当前的分区名字,意思就是吧当前的数据库放到哪个分区中
如果使用W25Q的话,设置的分区越大,那么读取和写入的时间越长

2.2 时序数据库 初始化

/* TSDB object */
struct fdb_tsdb tsdb = { 0 };

static void lock(fdb_db_t db)
{
    __disable_irq();
}

static void unlock(fdb_db_t db)
{
    __enable_irq();
}

static fdb_time_t get_time(void)
{
    /* Using the counts instead of timestamp.
     * Please change this function to return RTC time.
     */
    return ++counts;		//这里要返回实际的RTC值得时间戳,使用mktime函数,具体函数用法清查阅 https://blog.csdn.net/shileiwu0505/article/details/123030559
}

/*##以下代码放入main中##*/
	#ifdef FDB_USING_TSDB
	{ /* TSDB Sample */
			/* set the lock and unlock function if you want */
			fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_LOCK, lock);
			fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_UNLOCK, unlock);
			/* Time series database initialization
			 *
			 *       &tsdb: database object
			 *       "log": database name
			 * "fdb_tsdb1": The flash partition name base on FAL. Please make sure it's in FAL partition table.
			 *              Please change to YOUR partition name.
			 *    get_time: The get current timestamp function.
			 *         128: maximum length of each log
			 *        NULL: The user data if you need, now is empty.
			 */
			result = fdb_tsdb_init(&tsdb, "log", "TSDB", get_time, 128, NULL);
			/* read last saved time for simulated timestamp */
			fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_GET_LAST_TIME, &counts);

			if (result != FDB_NO_ERR) {
					return -1;
			}

			/* run TSDB sample */
			tsdb_sample(&tsdb);
	}
	#endif /* FDB_USING_TSDB */	

注意:
函数:result = fdb_tsdb_init(&kvdb, “env”, “KVDB”, &default_kv, NULL);
中的第三个参数 “KVDB” 是当前的分区名字,意思就是吧当前的数据库放到哪个分区中

注意:使用TSDB的话如果使用W25Q的话,设置的分区越大,那么读取和写入的时间越长,实际测试中,分区设置的很大的话要等待一会就有数据提示;如果设置的查询开始时间距离最早的时间过长的话,那么需要等待一小会,如果查询开始时间具体写入最早时间很近的话数据马上就查询出来

3. 实际测试工程

实际测试例程STM32L475 中移物联万耦开发板

实际测试例程移植到STM32F103VE使用内置Flash 也包含了使用SFUD驱动外置flash W25Q64的例程

SFUD 驱动代码包含了STM32F10X内置Flash驱动和外置W25Q64 QSPI驱动
在这里插入图片描述
使用普通的SPI驱动外置flash W25Q64,这个源码没有移植FlashDB,需要自行移植

4. 实际测试效果

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值