
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——一、介绍
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——二、移植前准备
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——三、移植SFUD
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——四、移植Fal
[FlashDB]基于GD32纯代码裸机移植FlashDB数据库——五、移植FlashDB
移动源码文件到当前工程相应文件夹下,如下图:
7.3 移动 FlashDB 测试代码移动源码文件到当前工程相应文件夹下,如下图:
7.4 在Keil的文件组中添加源文件至此,FlashDB移植全部完成!!!
然后测试FlashDB移植是否成功。。。
7.5 修改 fdb_cfg.h 文件关键修改一处:
宏定义flash写粒度(位于Line32)
#define FDB_WRITE_GRAN 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;
}
测试,主函数实现如下:
#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);
}
}
需等待一段时间后重新上电。。。
测试结果如下:
至此,FlashDB全部移植完成!!!
最后,根据以上操作步骤完成的完整demo。下载