GD32手把手教你移植FlashDB(片外Flash) -- 3.FlashDB使用

GD32手把手教你移植FlashDB(片外Flash) – 1.FlashDB-sfud移植
GD32手把手教你移植FlashDB(片外Flash) – 2.FlashDB移植
GD32手把手教你移植FlashDB(片外Flash) – 3.FlashDB使用

示例代码: https://gitee.com/ljmRD/GD32F427_FlashDB
在这里插入图片描述

3.FlashDB使用

main()

/************************************************* WKS GD32F427ZGT6核心板* SPI FLASH 实验************************************************/#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/KEY/key.h"
#include "./BSP/NORFLASH/norflash.h"
#include "SEGGER_RTT.h"
#include <string.h>
#include <stdio.h>
#include "sfud.h"
#include "fal.h"
#include "flashdb.h"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);static void lock(fdb_db_t db)
{__disable_irq();
}static void unlock(fdb_db_t db)
{__enable_irq();
}static 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;
}static fdb_time_t get_time(void)
{/* Using the counts instead of timestamp.* Please change this function to return RTC time.*/return ++counts;
}static 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;
}int main(void)
{uint16_t i = 0;delay_init(200); /* 初始化延时函数 */led_init();      /* 初始化LED */norflash_init(); /* 初始化NORFLASH */sfud_init(); // 初始化sfudfal_init();  // 初始化falflashdb_test_kvdb(); // kvdb测试flashdb_test_tsdb(); // tsdb测试while (1){i++;if (i == 20){LED0_TOGGLE(); /* LED0闪烁 */i = 0;}delay_ms(10);}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3279693.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

华为云上如何创建桶

目录 一、进入对象存储服务(OBS)页面,点击【创建桶】二、输入桶的相关信息三、获取 projectId四、获取 OBS Endpoint五、获取 AK/SK一、进入对象存储服务(OBS)页面,点击【创建桶】 二、输入桶的相关信息 可以勾选购买套餐: 点【立即创建】按钮完成桶的创建。 三、获取…

Vue3开源Tree组件研发:节点勾选支持v-model

自研Tree组件有两个原因&#xff1a;1. 目前开源UI对Tree组件的用户API不太友好&#xff0c;2. 提升Vue3组件自研能力。 目前已实现的功能见上面思维导图。想象Tree组件的一个使用场景&#xff1a;后台管理员通过Tree组件来完成用户角色授权&#xff0c;同时支持对权限进行新增…

【和相同的二元子数组】python刷题记录

R2-前缀和专题 目录 前缀和哈希表 双指针 ps: 第一眼过去&#xff0c;这题应该能用双指针解出来&#xff0c;应该也能用前缀和解题。 前缀和哈希表 适用于 nums[i] 值不固定为 0 和 1 的其他情况 class Solution:def numSubarraysWithSum(self, nums: List[int], goal: i…

揭秘高效语音转文字工具:让沟通更便捷

嘿&#xff0c;各位办公室的小伙伴们&#xff0c;今儿咱们来聊聊那些能让咱们文员生活大变样的神器——特别是那些能把咱们嘴里嘟囔的话儿&#xff0c;瞬间变成电脑里整整齐齐文字的语音转文字工具。说起来&#xff0c;自从有了这些宝贝&#xff0c;我感觉自己都快能飞起来了&a…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址&#xff0c;这样在需要迁移应用的时候就造成了巨大的麻烦&#xff0c;所以我决定用nginx做反向代理&#xff0c;这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…

ETH现货ETF流入量估算:会重演BTC现货ETF走势吗?

以太坊现货ETF将于7月23日上线&#xff0c;成为市场关注的焦点。ETH ETF的推出带来了很多与BTC ETF不同的特性&#xff0c;这些特性容易被市场忽视。本文将探讨ETH现货ETF的流入量估算&#xff0c;并分析其是否会重演BTC现货ETF的走势。 ETHE流出量预测 ETH ETF的收费结构与BT…

生活方式酒店升势迅起,喆啡酒店缘何成为投资热点?

伴随国内消费结构转型升级&#xff0c;旅游需求持续增加。文旅部发布的《国内旅游提升计划&#xff08;2023—2025年&#xff09;》提出&#xff0c;需丰富优质旅游供给&#xff0c;并进一步提高消费者体验及满意度&#xff0c;这将为酒店行业带来更广阔的客源和更高的质量要求…

云借阅图书管理系统——系统概述

一、云借阅系统功能模块介绍 云借阅图书管理系统主要实现了两大功能模块&#xff1a;用户登录模块和图书管理模块&#xff0c;用户登录模块主要用于实现用户的登录与注销&#xff1b;图书管理模块主要用于管理图书&#xff0c;如新书推荐、图书借阅等。 二、云借阅系统功能结…

怎么隐藏搜狗输入法

点击输入法&#xff0c;右键选择更多 点击选项&#xff0c;点击全屏隐藏

Mojo函数

正如在语言基础中提到的&#xff0c;Mojo支持两种类型的函数&#xff1a;def和fn函数。您可以在任何函数中使用这两种声明方式&#xff0c;包括main()函数&#xff0c;但它们具有不同的默认行为&#xff0c;如本页面所述。 我们认为def和fn都有很好的用例&#xff0c;并且不认…

opencv arm 交叉编译

step1.opencv源码文件夹下新建build-arm目录 step2. cmake图像化配置 cmake-gui .. step3. 选择交叉编译 step4.检索交叉编译链路径 step5. 配置 配置install路径 配置编译、链接选项 添加人脸检测模块 config->generate step6. make编译 built-arm目录下&#xff1a; …

谷粒商城实战笔记-61-商品服务-API-品牌管理-云存储开通与使用

文章目录 一&#xff0c;图片云存储二&#xff0c;阿里云OSS1&#xff0c;OSS2&#xff0c;基于OSS的文件上传架构3&#xff0c;Java中使用OSS 一&#xff0c;图片云存储 这张图展示了文件存储的几种常见模式&#xff1a; 普通上传分布式情况下的普通上传使用自建服务器云存储…

vue3-print-nb实现打印pdf分页

安装插件 npm install vue3-print-nb --savevue3 引入 import print from vue3-print-nb // 打印插件 app.use(print)使用 这里使用的是对象配置方式 对象配置方式——在js中定义一个对象&#xff0c;对象中可配置打印区域相关属性&#xff0c;在需要打印的单据内容最外面的…

Java----反射

什么是反射&#xff1f; 反射就是允许对成员变量、成员方法和构造方法的信息进行编程访问。换句话来讲&#xff0c;就是通过反射&#xff0c;我们可以在不需要创建其对象的情况下就可以获取其定义的各种属性值以及方法。常见的应用就是IDEA中的提示功能&#xff0c;当我…

【FAS】《The Research of RGB Image Based Face Anti-Spoofing》

文章目录 1、原文2、相关工作3、基于特征解耦的人脸活体检测算法3.1、方法3.2、实验结果 4、基于解构与组合的人脸活体检测方法4.1、方法4.2、实验 5、作者总结6、结论&#xff08;own&#xff09;7、附录7.1、CycleGAN7.2、InfoGAN7.3、3D Face 1、原文 [1]张克越.基于RGB图像…

民大食堂用餐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;档口号管理&#xff0c;商家餐品管理&#xff0c;餐品种类管理&#xff0c;购物车管理&#xff0c;订单信息管理 微信端账号功能包括&#xff1a;系统首页&a…

跟着丑萌气质狗学习WPF——自定义按钮模板以及设置触发器

自定义按钮模板以及设置触发器 <Window x:Class"WPF_Study_Solution.Window4"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.micros…

多线程-进阶2

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1.CAS 1.1CAS全称:Compare and swap 比较内存和cpu寄存器中的内容,如果发现相同,就进行交换(交换的是内存和另一个寄存器的内容) 一个内存的…

AB安全产品详解Guard master Safety Products

AB安全产品详解Guard master Safety Products

ubuntu安装并配置flameshot截图软件

参考&#xff1a;flameshot key-bindins 安装 sudo apt install flameshot自定义快捷键 Settings->Keyboard->View and Customize Shortcuts->Custom Shortcuts&#xff0c;输入该快捷键名称&#xff08;自定义&#xff09;&#xff0c;然后输入command&#xff08;…