首页 > 其他分享 >【实测】使用STM32H7板子FatFS文件系统每秒读写2MB文件,实时写入7450个文件不出错,写满16GB SD卡

【实测】使用STM32H7板子FatFS文件系统每秒读写2MB文件,实时写入7450个文件不出错,写满16GB SD卡

时间:2024-11-07 13:20:49浏览次数:4  
标签:文件 7450 timelen LEN 2MB result FILE printf

【测试平台】

STM32-V7开发板

 

【测试例子】

https://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

V7-025_FatFS文件系统例子(SD卡 V1.2)


【测试条件和校验】

运行例子里面的命令6,命令6是个测速函数,每次写入2MB文件,同时读取出来校验,保证写入的没问题。

/*
*********************************************************************************************************
*        函 数 名: WriteFileTest
*        功能说明: 测试文件读写速度
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
static void WriteFileTest(void)
{
        FRESULT result;
        char path[64]; 
        uint32_t bw;
        uint32_t i,k;
        uint32_t runtime1,runtime2,timelen;
        uint8_t err = 0;
        static uint32_t s_ucTestSn = 0;
 
         
        for (i = 0; i < sizeof(g_TestBuf); i++)
        {
                g_TestBuf[i] = (i / 512) + '0';
        }
 
          /* 挂载文件系统 */
        result = f_mount(&fs, DiskPath, 0);                        /* Mount a logical drive */
        if (result != FR_OK)
        {
                printf("挂载文件系统失败 (%s)\r\n", FR_Table[result]);
        }
 
        /* 打开文件 */
        sprintf(path, "%sS%05d.txt", DiskPath, s_ucTestSn++); /* 每写1次,序号递增 */       
        result = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE);
 
        /* 写一串数据 */
        printf("开始写文件%s %dKB ...\r\n", path, TEST_FILE_LEN / 1024);
         
        runtime1 = bsp_GetRunTime();        /* 读取系统运行时间 */
        for (i = 0; i < TEST_FILE_LEN / BUF_SIZE; i++)
        {
                result = f_write(&file, g_TestBuf, sizeof(g_TestBuf), &bw);
                if (result == FR_OK)
                {
                        if (((i + 1) % 8) == 0)
                        {
                                printf(".");
                        }
                }
                else
                {
                        err = 1;
                        printf("%s文件写失败\r\n", path);
                        break;
                }
        }
        runtime2 = bsp_GetRunTime();        /* 读取系统运行时间 */
         
        if (err == 0)
        {
                timelen = (runtime2 - runtime1);
                printf("\r\n  写耗时 : %dms   平均写速度 : %dB/S (%dKB/S)\r\n",
                        timelen,
                        (TEST_FILE_LEN * 1000) / timelen,
                        ((TEST_FILE_LEN / 1024) * 1000) / timelen);
        }
 
        f_close(&file);                /* 关闭文件*/
 
 
        /* 开始读文件测试 */
        result = f_open(&file, path, FA_OPEN_EXISTING | FA_READ);
        if (result !=  FR_OK)
        {
                printf("没有找到文件: %s\r\n", path);
                return;
        }
 
        printf("开始读文件 %dKB ...\r\n", TEST_FILE_LEN / 1024);
         
        runtime1 = bsp_GetRunTime();        /* 读取系统运行时间 */
        for (i = 0; i < TEST_FILE_LEN / BUF_SIZE; i++)
        {
                result = f_read(&file, g_TestBuf, sizeof(g_TestBuf), &bw);
                if (result == FR_OK)
                {
                        if (((i + 1) % 8) == 0)
                        {
                                printf(".");
                        }
 
                        /* 比较写入的数据是否正确,此语句会导致读卡速度结果降低到 3.5MBytes/S */
                        for (k = 0; k < sizeof(g_TestBuf); k++)
                        {
                                if (g_TestBuf[k] != (k / 512) + '0')
                                {
                                          err = 1;
                                        printf("Speed1.txt 文件读成功,但是数据出错\r\n");
                                        break;
                                }
                        }
                        if (err == 1)
                        {
                                break;
                        }
                }
                else
                {
                        err = 1;
                        printf("Speed1.txt 文件读失败\r\n");
                        break;
                }
        }
 
        runtime2 = bsp_GetRunTime();        /* 读取系统运行时间 */
         
        if (err == 0)
        {
                timelen = (runtime2 - runtime1);
                printf("\r\n  读耗时 : %dms   平均读速度 : %dB/S (%dKB/S)\r\n", timelen,
                        (TEST_FILE_LEN * 1000) / timelen, ((TEST_FILE_LEN / 1024) * 1000) / timelen);
        }
 
        /* 关闭文件*/
        f_close(&file);
 
        /* 卸载文件系统 */
        f_mount(NULL, DiskPath, 0);
}

 

【实测】

1500个文件时:

5100个文件时:

写满SD卡,特别注意,但SD卡还剩下一点空间的时候,比如200M时,建议停止再写入,防止写爆后损坏SD卡

 

标签:文件,7450,timelen,LEN,2MB,result,FILE,printf
From: https://www.cnblogs.com/armfly/p/18531954

相关文章

  • 问题排查之Vscode无法拖进文件
    正常情况下,我们是可以从资源管理器中直接拖文件到vscode中进行编辑的。但是如果突然出现不能编辑的情况。有以下几种情况,可以依次去排查。检查VSCode设置:确保VSCode的设置中允许拖拽文件到编辑器中。在VSCode的“文件->首选项->设置”中搜索“draganddrop”,确保“Workbench......
  • 前后端大文件上传,断点续传、分片上传、秒传的完整实例
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • 文件夹加密小工具:保护你的隐私安全
    在数字化时代,个人数据的隐私和安全性变得尤为重要。无论是存储重要文件、敏感信息还是私人照片,我们都希望这些数据能够得到妥善保护。文件夹加密小工具正是为了满足这一需求而设计的,它采用C#语言编写,基于.NET4.7框架,并引用了miniExcel库来加载和保存用户设置的文件夹列表,确保下次......
  • winring0.sys 是一个系统驱动程序文件,它通常与第三方工具或软件一起使用,主要用于访问
    winring0.sys是一个系统驱动程序文件,它通常与第三方工具或软件一起使用,主要用于访问系统硬件信息和提供低级别硬件控制。这些工具或软件可能需要与操作系统的内核进行交互,或者获取系统的底层信息,而winring0.sys驱动程序就起到了桥梁的作用,允许这些程序进行底层硬件操作。下面是......
  • AI绘画本地版ComfyUI终于来了!(一键整合包,免安装更方便)附各种工作流及模型文件1000张工
    前言:comfyUI自从面世以来,就以一种潜力股的姿态快速流行了起来,越来越多的小伙伴开始使用comfyUI。也许你一开始会被comfyUI密密麻麻的“线路”吓到,但其实comfyUI也没那么复杂,并且好处多多。今天给大家分享一下AI绘画进阶工具ComfyUI,作为StableDiffusionWebUI的进阶版工......
  • nodejs通过s3-zip对AWS-S3服务上的文件下载操作
    这里对接的是百度智能云对象存储服务,用的是aws-sdk进行服务对接的,遵照的标准都是AWSS3服务那一套标准。1、awss3服务对接的基本配置及操作流程参考博文:https://blog.csdn.net/LegendaryChen/article/details/1297753042、单个存储文件对象的下载://导入依赖constAWS=req......
  • oracle11g启动过程中加载配置文件
    oracle指定配置文件启动,要是不指定配置文件启动的话默认找的参数文件顺序如下:在oracle11g中oracle启动过程中默认会加载相应的配置文件来启动oracle服务。检查参数文件有两个,一个是spfile<ORACLE_SID>.ora文件,另一个是inti<ORACLE_SID>.ora文件。oracle软件服务安装完成后......
  • C++ ftp上传文件
     目录结构:ftpdemo/include/elapse.h1/*************************************************2Copyright(C),2019-2029,GuideTech.Co.,Ltd.3Filename:elapse.h4Author:henry5Version:V1.0.0.06Date:202410087Description:计算函数运行时间......
  • 提供一个基本的cmakelists.txt文件
     project(ftptest)message("----------cmake${PROJECT_NAME}----------start")#设置构建类型为Release#set(CMAKE_BUILD_TYPERelease)set(CMAKE_VERBOSE_MAKEFILEON)#set(CMAKE_CXX_FLAGS"$ENV{CXXFLAGS}-rdynamic-O0-ggdb-std=c++11-Wall-Wno-......
  • 蓝凌OA /sys/webservice/hrStaffWebService存在任意文件读取漏洞
    蓝凌OA/sys/webservice/hrStaffWebService接口处存在任意文件读取漏洞FOFAapp="Landray-OA系统"POC文件读取POST/sys/webservice/hrStaffWebServiceHTTP/1.1Host:Content-Type:multipart/related;boundary=----j0ofrwsv2dtllbzzkyh9User-Agent:Mozilla/5.0(Wind......