使用单个文件作数据库条目存储
项目需求,需要定制一个嵌入式的设备,具有数据库存储与检索功能。
初期想法是使用文件,一个文件代表一条数据,通过文件名对数据进行定位。
先不考虑数据写入,先看看数据读取的情况。
FAT32单文件夹最大能放多少个文件
上面博客已经造好了数据,下面尝试读文件:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "sram.h"
#include "malloc.h"
#include "usmart.h"
#include "sdio_sdcard.h"
#include "malloc.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断TIM_Cmd(TIM3,ENABLE); //使能定时器3NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}int timeout=0;
//定时器3中断服务函数
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断{//LED1=!LED1;timeout++;}TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}void test()
{FIL *f_test;u8 buffer[520];u8 res;unsigned int FATFSNumSize;f_test=(FIL*)mymalloc(SRAMIN,sizeof(FIL));if(f_test==NULL){printf("申请内存失败\r\n");return;}f_open(f_test, "0:Test/00000000000000019875.txt",FA_OPEN_EXISTING | FA_READ);FATFSNumSize = f_size(f_test); //fat32文件系统返回的文件大小printf("file size:%d\r\n\r\n",FATFSNumSize);res = f_read(f_test,buffer, 512, &br); //将文件内容读出到数据缓冲区 br存储此次读出数据的数量,最大512printf("%s\r\n",buffer);}int main(void)
{u32 total,free;u8 t=0;u8 res=0;int time=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2TIM3_Int_Init(65535,84-1); //1Mhz计数频率,最大计时65ms左右超出delay_init(168); //初始化延时函数uart_init(115200); //初始化串口波特率为115200LED_Init(); //初始化LEDusmart_dev.init(84); //初始化USMARTLCD_Init(); //LCD初始化KEY_Init(); //按键初始化W25QXX_Init(); //初始化W25Q128my_mem_init(SRAMIN); //初始化内部内存池my_mem_init(SRAMCCM); //初始化CCM内存池POINT_COLOR=RED;//设置字体为红色while(SD_Init())//检测不到SD卡{LCD_ShowString(30,150,200,16,16,"SD Card Error!");delay_ms(500);LCD_ShowString(30,150,200,16,16,"Please Check! ");delay_ms(500);LED0=!LED0;//DS0闪烁}exfuns_init(); //为fatfs相关变量申请内存f_mount(fs[0],"0:",1); //挂载SD卡res=f_mount(fs[1],"1:",1); //挂载FLASH.printf("start\t\n");TIM_SetCounter(TIM3,0);//重设TIM3定时器的计数器值test();time=TIM_GetCounter(TIM3)+(u32)timeout*65536; //计算所用时间printf("time:%d\r\n",time);printf("end\r\n");while(1){t++;delay_ms(200);LED0=!LED0;}
}
代码从探索者F407开发板 实验39 FATFS实验 修改。
串口显示的几组结果如下:
LCD ID:9341
start
file size:2000000000000000019875
time:5098269
end
LCD ID:9341
start
file size:2000000000000000019875
time:5098521
end
LCD ID:9341
start
file size:2000000000000000019875
time:5095779
end
换算过来就是5s,即需要5s时间才能完成在2w条数据中检索出1条数据,实际上也感觉到了长时间的等待,对于一个和用户交互的产品来说,这个时间已经太长了。
后续可能会尝试在stm32上使用sqlite数据库,也有可能换具有linux或者wince操作系统的平台。
使用单个文件作数据库条目存储相关推荐
- 图片或者其他文件在数据库的存储方式详解
关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1. 把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...
- 在oracle数据库中存储数据库的文件是,Oracle数据库,oracle
数据库结构和空间管理 一个ORACLE数据库是数据的集合,被处理成一个单位.一个ORACLE数据库有一个物理结构和一个逻辑结构. 物理数据库结构(physical database structure ...
- PHP-CRUD-API:将 REST API 添加到 MySQL/MariaDB、PostgreSQL、SQL Server 或 SQLite 数据库的单个文件 PHP 脚本
https://github.com/mevdschee/php-crud-api 将 REST API 添加到 MySQL/MariaDB.PostgreSQL.SQL Server 或 SQLit ...
- 将数据库服务器的文件D 改名为,MySQL如何更改数据库数据存储目录详解
前言 MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤.话不多说了,一起来看看吧 ...
- mysql 建立一棵树_如何存储一颗树到文件或者数据库
也就是序列化存储一棵树,不管是存储到数据库,还是存储到文件,都可以使用树的基本遍历方式序列化存储再反序列化构造.但是考察使用数据库存储时肯定还希望存储以后实现更高级的功能,如快速查询某个节点的所有子节 ...
- 数据库中存储图片等文件的小探讨
关于在数据库中存储图片文件的问题 直接存储在数据库中 这样做有什么问题 另寻方法 或许接下来的文章没有明显的帮到你解决存储问题,但花点时间耐心的往下读一读,在思路上或许对你可以有点帮助! 直接存储在数 ...
- 分布式数据库灵活存储机制与应用实践
2019独角兽企业重金招聘Python工程师标准>>> 嘉宾介绍:郝大为,巨杉数据库技术总监,曾任职IBM DB2数据库部门以及亚信大数据部门,资深的数据库专家.拥有丰富的数据库开发 ...
- 数据库之存储引擎,数据类型-30
数据库之存储引擎,数据类型-30 数据存储引擎 什么是引擎 ? 一个功能的核心部分 引擎可以被分类 为什么要分类? 自然 增压的 汽油 柴油 电动 混合动力 天然气 核动力 烧水 汽油 ...
- MySQL数据库Raid存储方案
作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...
最新文章
- 整理了 25 个 Pandas 实用技巧,拿走不谢!
- 懒人必备:.NetCore快速搭建ELK分布式日志中心
- 清华计算机与科学系考研,清华计算机科学与技术系考研怎么复习
- spring + hibernate + mysql 事务不回滚
- RHCE 学习笔记(16) - KickStart
- python图像库_Python常用图像处理库整理
- (238)数字IC工程师核心技能树(一)
- DigitalClock的替代者TextClock
- 《Google软件测试之道》告诉你什么是测试
- 《算法导论》第十四章----数据结构的扩张(动态顺序统计)
- 【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )
- dex2jar java 1.8_利用 dex2jar 反编译 dex文件
- python实现九九乘法表代码解释_python编写九九乘法表代码
- pr转场 18种不同风格图形元素小故障视频过渡pr视频转场模板
- Python 深度学习AI - 声音克隆、声音模仿、模拟特朗普声音唱《See You Again》,Real-Time-Voice-Cloning项目的安装与使用
- Ubuntu系统接入移动硬盘后打不开问题
- 创业关于抖音的技术分析与同类产品如何弯道超车的几个问题
- 策略模式——鸭子游戏
- F - 喜欢砍竹子的黑泽明
- 动态规划_数字的划分