3

我有一个在 STM32F7 上运行的数据记录系统,它使用 ChaN 的 FatFs 将数据存储到 SD 卡: http ://elm-chan.org/fsw/ff/00index_e.html

每组新数据都存储在带有目录的单独文件中。在设备上进行后处理期间,会读取每个文件,然后将其删除。在测试了包含 5000 个文件的目录中的打开、读取、删除序列后,我发现我扫描的目录越远,它的速度就越慢。

一开始这个循环大约需要 100-200 毫秒,2000 个文件,现在需要 700 毫秒。有没有更快的存储、读取、删除数据的方法?或配置 FatFs?

编辑:抱歉应该指定,我使用 FAT32 作为 FAT 文件系统

f_opendir(&directory, "log");
while(1) {
    f_readdir(&directory, &fInfo);
    if(fInfo.fname[0] == 0) {
      //end of the directory
      break;
    }

    if(fInfo.fname[0] == '.') {
      //ignore the dot entries
      continue;
    }

    if(fInfo.fattrib & AM_DIR) {
      //its a directory (shouldnt be here), ignore it
      continue;
    }

    sprintf(path, "log/%s", fInfo.fname);
    f_open(&file, path, FA_READ);
    f_read(&file, rBuf, btr, &br);
    f_close(&file);

    //process data...

    f_unlink(path); //delete after processing
}
4

1 回答 1

4

您可以通过将文件拆分为多个目录来缩短目录链(只需为每 500 个左右的文件创建一个新的子目录)。这可以使访问特定文件的速度更快一些,因为要走的链平均变得更短。(这只是假设您不是在搜索具有特定名称的文件,而是按照文件创建的顺序处理文件 - 在这种情况下,搜索算法可以非常简单)。

除此之外,没有太多希望更快地获得一个简单的 FAT 文件系统。这是旧 FAT 技术的主要问题。

于 2018-10-15T21:16:01.023 回答