栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间:发布时间: 百科书网 趣学号

文章目录
  • 【相关文章导航】
  • 七、移植FlashDB
    • 7.1 移植步骤
    • 7.2 移动源代码
    • 7.3 移动 FlashDB 测试代码
    • 7.4 在Keil的文件组中添加源文件
    • 7.5 修改 fdb_cfg.h 文件
    • 7.6 测试 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
    
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)
    {
        
        return ++counts;
    }
    
    uint8_t flashdb_test_kvdb(void)
    { 
    	
    	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]);
    	
    	fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_LOCK, (void *)lock);
    	fdb_kvdb_control(&kvdb, FDB_KVDB_CTRL_SET_UNLOCK, (void *)unlock);
    	
    	result = fdb_kvdb_init(&kvdb, "env", "KVDB", &default_kv, NULL);
    
    	if (result != FDB_NO_ERR) {
    		return -1;
    //		printf("rn FDB_NO_ERR = SET !!! rn");
    	}
    
    	
    	kvdb_basic_sample(&kvdb);
    	
    	kvdb_type_string_sample(&kvdb);
    	
    	kvdb_type_blob_sample(&kvdb);
    	return 0;
    }
    uint8_t flashdb_test_tsdb(void)
    { 
    	fdb_err_t result;
    	
    	fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_LOCK, (void *)lock);
    	fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_SET_UNLOCK, (void *)unlock);
    	
    	result = fdb_tsdb_init(&tsdb, "log", "TSDB", get_time, 128, NULL);
    	
    	fdb_tsdb_control(&tsdb, FDB_TSDB_CTRL_GET_LAST_TIME, &counts);
    
    	if (result != FDB_NO_ERR) {
    		return -1;
    //		printf("rn FDB_NO_ERR = SET !!! rn");
    	}
    
    	
    	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};
    
    static struct fdb_default_kv_node default_kv_table[] = {
            {"username", "armink", 0}, 
            {"password", "123456", 0}, 
            {"boot_count", &boot_count, sizeof(boot_count)}, 
            {"boot_time", &boot_time, sizeof(boot_time)},    
    };
    
    static struct fdb_kvdb kvdb = { 0 };
    
    struct fdb_tsdb tsdb = { 0 };
    
    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);
    	
    	
    	flashdb_test_kvdb();
    	
    	flashdb_test_tsdb();
    
        while(1) 
    	{
    		printf("测试成功!!!");
    		led_flash(5);
        }
    }
    

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

  1. 测试结果如下:


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

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

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1077833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号