共1条
1/1 1 跳转至页
[推荐]51 flash文件系统DIY(6)___FAT揭秘
上个星期我们讲了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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |