c - FAT 文件系统和大量写入

标签 c fat32 fat flash-memory

我正在考虑将 FAT 文件系统用于嵌入式数据记录应用程序。记录器只会创建一个文件,并每分钟不断地向其中附加 40 字节的数据。使用几年后,写入周期将超过一百万次。我的问题是:FAT 系统是否会在每次附加文件时更改文件分配表?它如何跟踪文件末尾的位置?它只是在末尾放置一个 EndOfFile 标记还是将长度存储在 FAT 表中?如果我每次写入时它都会更改 FAT 表,那么我会在短短几年内将闪存损坏。 FAT 系统是否适合此应用程序?

我的另一个想法是,我可以将原始数据字节存储在存储卡中,并在每次写入时在数据末尾放置一个 EndOfFile 标记。但这不太理想,因为这意味着从记录器中获取数据的唯一方法是通过串行传输,而不是通过 PC 和读卡器。

最佳答案

当您修改文件时,FAT 会更新目录表(至少,如果您关闭文件,它会更新,我不确定如果不关闭会发生什么)。它不仅仅是文件大小,还有最后修改日期:

http://en.wikipedia.org/wiki/File_Allocation_Table#Directory_table

如果您的闪存 Controller 没有进行透明的磨损均衡,并且您的闪存驱动程序没有重新定位事物以平衡磨损,那么我猜您可能会导致磨损。请参阅您的手册,但如果您使用的是消费类硬件,我会认为所有东西都有磨损均衡。

从好的方面来说,如果您担心的事件每分钟都会发生,那么您应该能够在测试中大大加快速度,看看 2 年的日志条目是否真的会破坏您的实际硬件。甚至可能比尝试查找相关制造商文档更快......

关于c - FAT 文件系统和大量写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618278/

相关文章:

c - 将文本文件读入二维数组

c - 在c中,宏__FILE __,__ LINE__和__PRETTY_FUNCTION__是否分配内存?

c - 哪种变量类型可以容纳 10^18 这样大的数字

c - FAT32:根目录条目

assembly - 为什么很少使用 FAT#2?

无法比较指针和 int,C

filesystems - FAT32 >4gb 文件的奇怪标准

hadoop - 计算脂肪32和HDFS的最大体积大小

java - SuperFloppyFormatter 对于超过 512 MB 的任何内容都会返回 FAT32?

c - 从 FAT12 文件获取数据