【问题标题】:How to get largest free contiguous block of memory in FatFs如何在 FatFs 中获得最大的空闲连续内存块
【发布时间】:2017-12-01 04:16:42
【问题描述】:

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

在 FatFS API 中,有一些函数可以获取设备上剩余的可用空间量,即 f_getfree。还有一个 f_expand 函数,它以字节为单位接收大小,并返回对于给定大小是否存在空闲的连续内存块。

有没有一种有效的方法来计算可用的最大空闲连续内存块?我试图避免任何形式的蛮力“猜测和检查”方法。谢谢

【问题讨论】:

    标签: c embedded fatfs


    【解决方案1】:

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

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

    【讨论】:

    • 好主意。谢谢!
    • 实际上是 f_expand 而不是 f_lseek 返回一个连续的、未分段的空间区域。
    • @tofro 不完全是,f_expand 返回它是否能够找到您作为参数传入的大小的连续空间量的状态。如果您传入该参数,它也会为您分配它。如果您只使用 f_expand,您仍然需要猜测并检查大小以获得最大的连续块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2021-09-30
    • 2022-01-26
    • 2021-06-05
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多