项目需求,需要定制一个嵌入式的设备,具有数据库存储与检索功能。
初期想法是使用文件,一个文件代表一条数据,通过文件名对数据进行定位。

先不考虑数据写入,先看看数据读取的情况。
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. 图片或者其他文件在数据库的存储方式详解

    关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1.  把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...

  2. 在oracle数据库中存储数据库的文件是,Oracle数据库,oracle

    数据库结构和空间管理 一个ORACLE数据库是数据的集合,被处理成一个单位.一个ORACLE数据库有一个物理结构和一个逻辑结构. 物理数据库结构(physical database structure ...

  3. 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 ...

  4. 将数据库服务器的文件D 改名为,MySQL如何更改数据库数据存储目录详解

    前言 MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤.话不多说了,一起来看看吧 ...

  5. mysql 建立一棵树_如何存储一颗树到文件或者数据库

    也就是序列化存储一棵树,不管是存储到数据库,还是存储到文件,都可以使用树的基本遍历方式序列化存储再反序列化构造.但是考察使用数据库存储时肯定还希望存储以后实现更高级的功能,如快速查询某个节点的所有子节 ...

  6. 数据库中存储图片等文件的小探讨

    关于在数据库中存储图片文件的问题 直接存储在数据库中 这样做有什么问题 另寻方法 或许接下来的文章没有明显的帮到你解决存储问题,但花点时间耐心的往下读一读,在思路上或许对你可以有点帮助! 直接存储在数 ...

  7. 分布式数据库灵活存储机制与应用实践

    2019独角兽企业重金招聘Python工程师标准>>> 嘉宾介绍:郝大为,巨杉数据库技术总监,曾任职IBM DB2数据库部门以及亚信大数据部门,资深的数据库专家.拥有丰富的数据库开发 ...

  8. 数据库之存储引擎,数据类型-30

    数据库之存储引擎,数据类型-30 数据存储引擎 什么是引擎 ? 一个功能的核心部分        引擎可以被分类 为什么要分类? 自然 增压的 汽油 柴油 电动 混合动力 天然气 核动力 烧水 汽油 ...

  9. MySQL数据库Raid存储方案

    作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...

最新文章

  1. 整理了 25 个 Pandas 实用技巧,拿走不谢!
  2. 懒人必备:.NetCore快速搭建ELK分布式日志中心
  3. 清华计算机与科学系考研,清华计算机科学与技术系考研怎么复习
  4. spring + hibernate + mysql 事务不回滚
  5. RHCE 学习笔记(16) - KickStart
  6. python图像库_Python常用图像处理库整理
  7. (238)数字IC工程师核心技能树(一)
  8. DigitalClock的替代者TextClock
  9. 《Google软件测试之道》告诉你什么是测试
  10. 《算法导论》第十四章----数据结构的扩张(动态顺序统计)
  11. 【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )
  12. dex2jar java 1.8_利用 dex2jar 反编译 dex文件
  13. python实现九九乘法表代码解释_python编写九九乘法表代码
  14. pr转场 18种不同风格图形元素小故障视频过渡pr视频转场模板
  15. Python 深度学习AI - 声音克隆、声音模仿、模拟特朗普声音唱《See You Again》,Real-Time-Voice-Cloning项目的安装与使用
  16. Ubuntu系统接入移动硬盘后打不开问题
  17. 创业关于抖音的技术分析与同类产品如何弯道超车的几个问题
  18. 策略模式——鸭子游戏
  19. F - 喜欢砍竹子的黑泽明
  20. 动态规划_数字的划分

热门文章

  1. Win10下报错:该文件没有与之关联的应用来执行该操作
  2. Python 蓝桥杯试题 基础练习 字母图形
  3. iframe PostMessage 实现父子组件的传值
  4. 理财-力哥七部定投法
  5. 超级vga显示卡_VESA 编程介绍(一)标准VGA BIOS及超级VGA模式号
  6. 〖产品思维训练白宝书 - 核心竞争力篇⑦〗- 产品经理核心竞争力解读之如何提升执行力
  7. Vuex中的state属性详解
  8. python matplotlib模块绘制条形图 三天票房
  9. proxy_pass upstream 负载均衡
  10. 用逆向设计和回归算法估算PWM