如何在 FatFs 中获得最大的空闲连续内存块

How to get largest free contiguous block of memory in FatFs

使用 FatFs 及其 API,我正在尝试为驱动器的其余部分预分配文件系统 space 以写入未知大小的文件。在文件写入过程结束时,任何未使用的 space 将被截断 (f_truncate)。但是,当文件系统在删除某些文件后变得碎片化时,我在分配足够 space 时遇到了问题。为了克服这个问题,我只想分配 space 作为文件系统上最大的连续内存块。

在FatFSAPI中,有获取设备剩余space空闲量的函数,即f_getfree。还有 f_expand 函数,它接受以字节为单位的大小和 returns 是否存在针对该给定大小的空闲连续内存块。

有没有一种有效的方法来计算可用的最大空闲连续内存块?我试图避免任何类型的蛮力 "guess and check" 方法。谢谢

一种方法是创建您自己的 API 扩展以计算所有扇区的连续 FAT 条目。

无需修改 API,您可以使用 f_lseek()。写入打开一个文件,使用f_lseek()扩展文件的大小直到'disk full'(连续space结束)。需要对新文件重复此操作,直到分配完所有磁盘。从中选择最大分配的文件,并删除其他文件。