这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [推荐]51 flash文件系统DIY(6)___FAT揭秘

共1条 1/1 1 跳转至

[推荐]51 flash文件系统DIY(6)___FAT揭秘

菜鸟
2002-10-22 22:15:25     打赏
上个星期我们讲了FAT管理空间的原理,文件除了文件内容本身外还有许多其他的属 性,我们上次在最后定义了一个结构(FDT_REC)用来详细描述文件的这些属性。一台计算机 上可能有很多文件和目录,所以就要保存很多这样的结构,所有的这些结构都是按照文件夹 (目录)为单位保存在一起的,一个文件夹下的所有文件的FDT_REC都保存在一起,我们把 它叫做FDT表。每个文件夹都有自己的FDT,我们把其中的每个结构项叫做一条FDT记录 (FDT_REC)。 还记得DOS命令“dir”吗?可能现在有些人也没学过和用过DOS了。Dir命令就是列出一 个目录(文件夹)下的所有文件,它其实就是查找FDT表的所有记录,并把文件名字,大 小,时间等内容打印到屏幕上。 在较早的FAT系统中,根目录的FDT位置固定,大小也是固定的。每一条FDT记录(就是 我们上次定义的FDT_REC)要占32字节,因为根目录FDT大小固定,所以根目录下可以容纳的 FDT_REC个数就是有限的,我记得好像(不太确切)在DOS3.3下,根目录下最多可以容纳文件 1024个。在以后的系统中对此作出了改进,根目录的大小是动态分配的,根目录下文件数目 就没有限制了。在我们的flash系统中根目录的FDT大小是固定的,所以我们的flash文件系 统,根目录下的文件数目也是有限制的。 计算机要创建一个文件,就要先根据文件的名字,当前时间信息,构造一条FDT_REC记 录,然后把这条FDT_REC记录插入到FDT表中去,一开始文件大小为0,起始簇为空(0xfff8), 这样就创建了一个空文件,至于向文件写入时的簇分配过程我们上次已经说过了。 删除文件的过程。删除文件时并不是把文件占用的所有簇都清空,而是先把文件在FDT表 中的记录项(FDT_REC)的第一个字节置为0x5e表示这条项目已经被删除。然后在FAT表中 释放该文件占用的簇。 文件系统的目录结构是如何实现的呢?子目录其实就是一个特殊的文件。他的FDT_REC 里记录了子目录自身的FDT表所在位置的起始簇。我们根据这个起始簇可以找到子目录的FDT 表,进而可以找到子目录下的所有文件。 在子目录下有两个特殊的FDT_REC,对应的文件名字是“..”和“.”,其中“..”代表 目录的上级目录,它的FDT_REC的startclu记录了父目录的FDT表的位置。所以我们在DOS 下用“CD.. ”就能返回上级目录。“.”则代表子目录自身。 我们来看看我们的flash文件系统FDT和FAT是如何安排的。 首先确定我们的簇的大小。簇的大小是扇区的整数倍,前面已经讲过为了合理利用空间 在允许的情况下簇应该越小越好。 根据根目录下允许的最大文件数确定根FDT需要占用的簇的数目,紧跟根FDT表后的就是FDT 表,根据flash的容量算出簇的总数目,进而就可以算出FAT所需要的空间大小. FAT后面的簇就是我们用来存放数据的区域了。 到这里为止我们已经把FAT表和FDT表的所有原理都已经了解得比较清楚了,今天说的内 容不多也刚好告一个段落,就到这儿吧。 最近工作有点忙,项目正在赶进度。所以连载的频率会降低,见谅! Taowa 2002.10.20 taowa@263.net



关键词: 推荐     flash     文件     系统     揭秘     我们     目录    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]