[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——五、移植FlashDB

【相关文章导航】

[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——一、介绍
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——二、移植前准备
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——三、移植SFUD
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——四、移植Fal
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——五、移植FlashDB

七、移植FlashDB

7.1 移植步骤

  1. 移动源代码
  2. 移动 FlashDB 测试代码
  3. 在Keil的文件组中添加源文件
  4. 修改 fdb_cfg.h 文件
  5. 测试 FlashDB

7.2 移动源代码

移动源码文件到当前工程相应文件夹下,如下图:

在这里插入图片描述

7.3 移动 FlashDB 测试代码

移动源码文件到当前工程相应文件夹下,如下图:

在这里插入图片描述

7.4 在Keil的文件组中添加源文件

在这里插入图片描述

至此,FlashDB移植全部完成!!!

然后测试FlashDB移植是否成功。。。

7.5 修改 fdb_cfg.h 文件

关键修改一处:

  1. 宏定义flash写粒度(位于Line32

    #define FDB_WRITE_GRAN                1/* @note you must define it for a value */
    

7.6 测试 FlashDB

  1. KVDB和TSDB测试函数以及其它必须函数实现:

    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;
    }
    
    uint8_t flashdb_test_kvdb(void)
    { /* KVDB Sample */
    	
    	fdb_err_t result;
    	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, (void *)lock);
    	fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_UNLOCK, (void *)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;
    //		printf("\r\n FDB_NO_ERR = SET !!! \r\n");
    	}
    
    	/* 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);
    	return 0;
    }
    uint8_t flashdb_test_tsdb(void)
    { /* TSDB Sample */
    	fdb_err_t result;
    	/* set the lock and unlock function if you want */
    	fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_LOCK, (void *)lock);
    	fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_UNLOCK, (void *)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;
    //		printf("\r\n FDB_NO_ERR = SET !!! \r\n");
    	}
    
    	/* run TSDB sample */
    	tsdb_sample(&tsdb);
    	return 0;
    }
    
  2. 测试,主函数实现如下:

    #include "sfud.h"
    #include "fal.h"
    #include "flashdb.h"
    
    #define SFUD_DEMO_TEST_BUFFER_SIZE                     1024
    static uint8_t sfud_demo_test_buf[SFUD_DEMO_TEST_BUFFER_SIZE];
    
    #define FDB_LOG_TAG "[main]"
    
    static uint32_t boot_count = 0;
    static time_t boot_time[10] = {0, 1, 2, 3};
    /* default KV nodes */
    static struct fdb_default_kv_node default_kv_table[] = {
            {"username", "armink", 0}, /* string KV */
            {"password", "123456", 0}, /* string KV */
            {"boot_count", &boot_count, sizeof(boot_count)}, /* int type KV */
            {"boot_time", &boot_time, sizeof(boot_time)},    /* int array type KV */
    };
    /* KVDB object */
    static struct fdb_kvdb kvdb = { 0 };
    /* TSDB object */
    struct fdb_tsdb tsdb = { 0 };
    /* counts for simulated timestamp */
    static int counts = 0;
    
    extern void kvdb_basic_sample(fdb_kvdb_t kvdb);
    extern void kvdb_type_string_sample(fdb_kvdb_t kvdb);
    extern void kvdb_type_blob_sample(fdb_kvdb_t kvdb);
    extern void tsdb_sample(fdb_tsdb_t tsdb);
    
    int main(void)
    {
        systick_config();
    	
    	led_init();
    	
    	gd_eval_com_init(EVAL_COM);    //初始化串口1
    	
    	sfud_init();
    	
    	fal_init();
    	
    //	sfud_test(0, sizeof(sfud_demo_test_buf), sfud_demo_test_buf);
    	
    	/* kvdb测试 */
    	flashdb_test_kvdb();
    	/* tsdb测试 */
    	flashdb_test_tsdb();
    
        while(1) 
    	{
    		printf("测试成功!!!");
    		led_flash(5);
        }
    }
    

需等待一段时间后重新上电。。。

  1. 测试结果如下:

    在这里插入图片描述
    在这里插入图片描述

至此,FlashDB全部移植完成!!!

最后,根据以上操作步骤完成的完整demo。下载

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值