RT-Thread Studio学习笔记之部署FlashDB——基于片外flash及FAL

前言

FlashDB 是一款超轻量级的嵌入式数据库。它结合了 Flash 的特性,具有较强的性能及可靠性。

FlashDB提供了键值数据库和时序数据库两种数据库模式,不仅资源占用极低,内存占用几乎为 0,而且存储容量大,非常适合用于物联网产品。

移植

根据 FlashDB开发文档,FlashDB 底层的 Flash 管理及操作依赖于 RT-Thread 的 FAL (Flash Abstraction Layer) Flash 抽象层开源软件包,所以将所用到的 Flash 对接到 FAL ,即可完成整个移植工作。

FlashDB移植的关键是FAL的移植。本文在片外flash上搭建FAL,并移植FlashDB。

下面我们就开始实际操作,从将flash挂载到spi总线上开始,最终完成FlashDB数据库的搭建。新手可以跟着一步一步做,有一些开发经验的朋友可以选择性地阅读。

1.开启SPI总线

新建一个空白的RT-Thread项目,本文基于STM32F103芯片。
首先在drivers目录下打开board.h文件,找到SPI对应部分。根据指导,一步一步做下去。在这里插入图片描述

操作步骤

step1:打开RT-Thread Settings,点击更多配置来到组件一栏,勾选如下。在这里插入图片描述

step2:board.h文件中,打开SPI宏定义。
在这里插入图片描述
step3:使用stm32cubemx产生初始化函数,将其粘贴于board.c文件末尾。
在这里插入图片描述
然后选择芯片型号——>填写项目名称,双击IOC文件后如图操作。
在这里插入图片描述
复制初始化函数到board.c文件。(ps:初始化函数在哪个文件中,名字叫什么,在board.h文件对应部分都是可以找到的哦)

在这里插入图片描述
step4:在drivers目录下的stm32f1xx_hal_conf.h文件中打开SPI驱动。
在这里插入图片描述

验证

配置完成,让我们编译下载一下,看看有没有成功。
在这里插入图片描述
使用list_device指令查看设备,可以看到SPI总线已经存在了。

2.挂载片外flash

接下来,我们将片外flash(W25Q128)挂到SPI总线上。

代码

此处,参考RT-Thread官方开发文档,在application目录下,新增flash.c文件。

#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>
#include "drv_spi.h"
#include "spi_flash.h"
#include "spi_flash_sfud.h"

#define DBG_TAG "flash"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

#define W25Q_SPI_BUS_NAME        "spi1"    /* 上一步骤 打开的是SPI1,这里也写1,一定要对应*/
#
### 将FlashDB移植至RT-Thread操作系统的指南 #### 1. 准备工作 为了成功将FlashDB集成到RT-Thread环境中,需先准备好必要的开发环境和工具链。确保已安装并配置RT-Thread SDK以及目标硬件的支持包[^2]。 #### 2. 添加FlashDB源码 下载最新版本的FlashDB库,并将其解压放置于项目目录下适当位置。该库包含了多个重要头文件如`flashdb.h`, `fdb_low_lvl.h`, `fdb_def.h`, 和 `fdb_cfg.h`[^1]。这些文件定义了数据库的操作接口和其他必需的数据结构。 #### 3. 配置Flash设备驱动程序 对于特定型号的MCU(微控制器单元),比如AT32F415CBT7搭配W25Q128闪存芯,在RT-Thread中实现对这类部存储器的支持通常依赖于SFUD (Serial Flash Universal Driver) 或者其他兼容的SPI Flash驱动方案。通过STM32CubeMX可以方便地设置SPI通信参数来适配具体的硬件平台需求。 #### 4. 初始化FlashDB实例 创建一个新的C/C++源文件用于初始化FlashDB对象并与选定的物理地址空间关联起来。下面是一个简单的例子展示如何完成这一步骤: ```c #include "rtthread.h" #include "fal.h" /* 如果使用FAL框架 */ #include "flashdb.h" // 假设已经完成了spi_flash_init()函数调用来启动底层驱动 extern int spi_flash_init(void); int main(void) { struct fdb_dev *dev; // 启动SPI Flash驱动 if(spi_flash_init()){ printf("Failed to initialize SPI Flash.\n"); return -1; } // 注册Flash设备给FlashDB管理 dev = fdb_register_device(&my_spi_flash_info); // 创建或打开一个名为"data_store"的数据库 struct fdb_db* db = fdb_open(dev, "data_store"); while(1){ // 应用逻辑... rt_thread_mdelay(100); } } ``` 此代码段展示了基本的应用流程:首先是初始化SPI Flash模块;接着注册这个设备供FlashDB管理和访问;最后尝试打开/创建指定名称的数据库实例以便后续数据持久化处理。 #### 5. 测试验证功能 编写测试案例以确认整个系统能够正常运作。可以通过向数据库写入一些简单记录再读取出来的方式来进行初步的功能检验。注意观察日志输出是否有任何异常提示信息。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值