Fat文件系统中基于位置的接口访问方法及其装置的制作方法

文档序号:6651359阅读:197来源:国知局
专利名称:Fat文件系统中基于位置的接口访问方法及其装置的制作方法
技术领域
本发明涉及计算机原理领域,具体涉及FAT文件系统中基于位置的接口访问方法,以及使用这种方法的装置。
背景技术
现有FAT文件系统,在访问接口上都是基于“文件名”,故而所有操作前,文件系统必须根据文件的名字找到它的存储位置以及相应的簇链表。通过文件名读取文件内容的流程可以描述为(1)逐层目录查找,例如查找“/testfolder/mp3/hello.mp3”,FAT文件系统会依据子目录名“testfolder”在FAT表中查找相应的表项(entry)结构,查找成功后依据表项结构定位testfolder目录的存储位置,而后在其目录下依据子目录名“mp3”查找对应的表项结构,最后在mp3目录下查找“hello.mp3”对应的表项结构,至此获取了文件对应的表项结构。
(2)从表项结构中获取文件的首簇(cluster)值。
(3)从FAT表中获取文件数据存储的簇链表,簇链表以0xfff(FAT12)或0xffff(FAT16)或0xffffffff(FAT32)作为结束标记。
(4)依据簇链表读取文件内容。
FAT文件分配表一式两份,它位于逻辑0扇区(即引导扇区)后面的几个扇区中,用来表示磁盘空间的分配信息。它不表示引导区、文件目录的信息,也不真正存储文件内容。
由于一个文件的数据并不一定完整的存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。为了实现文件的链式存储,硬盘记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT(文件分配表)来保存的,表中有很多表项,每项记录一个簇的信息。
表项(entry)是FAT文件系统中的一个基本结构,它用于表示文件、目录,事实上文件、目录的存储结构是一样的,只不过属性不一样而已。Entry结构中主要包含文件名字、属性、创建时间、访问时间、文件大小、首簇(cluster)值等信息。这些entry结构存储在FAT文件结构的“根目录区”和“文件存储区”中,文件查找时,系统先找到对应的Entry结构,而后进行其它相应处理。
FAT文件系统最常用的一个接口就是文件浏览,把磁盘上所有文件信息显示出来是所有应用层第一件要做的事情,因为浏览磁盘前,应用层并不知道磁盘上的数据信息。常规的FAT文件系统会提供两个接口findfirst()和findnext()用来逐目录、逐文件的浏览整个磁盘,而后返回文件目录信息,显示在应用层。
后续操作都基于第一次磁盘浏览操作,例如,应用层浏览磁盘获知根目录下有一个目录“test”和一个文件“fat.h”,那么应用层想继续浏览目录“test”,必然是根据上次浏览结果生成路径“/test”,调用findfirst函数,然后用findnext函数逐个目录逐个文件的浏览目录“test”,其它浏览操作同理。
这种基于文件名的访问方法在嵌入式开发中,存在两个明显的不足之处(1)子目录级数、文件名字长度的限制。进行文件访问,相应的参数传递是必需的,如果子目录级数加大或文件名字符数加长,势必耗用更多内存空间。因此,现有技术中,各种文件系统对子级目录的级数都有明确的限制。
(2)搜索文件时间长。由于文件系统采用逐层目录解析来寻找文件,因此耗时必然加长。
以上的缺陷已经成为嵌入式开发的障碍。

发明内容
本发明的目的是要克服目前现有技术的缺陷,提出一种快速、有效、能适用于嵌入式系统开发的、在FAT文件系统中基于位置的接口访问方法。
本发明提出一种FAT文件系统中基于位置的接口访问方法包括以下步骤定义一种结构体,这个结构体用于存储地址位置信息;进行位置解析操作,访问磁盘浏览根目录,并将根目录下的子目录和文件的所述结构体中的地址位置信息的返回到应用层;这些地址位置信息存储在寄存器中;当需要打开子目录或文件时,从寄存器中读取文件的地址位置信息。
上述的FAT文件系统中基于位置的接口访问方法,一种优选的方案是,所定义的结构体的地址信息包括文件或子目录所在的首簇值、文件的起始簇值、当前扇区值、终止扇区值、扇区中的表项值。
上述的FAT文件系统中基于位置的接口访问方法,一种优选的方案是,使用多个寄存器存储返回到应用层的文件信息。
上述的FAT文件系统中基于位置的接口访问方法,一种优选的方案是,使用2个寄存器存储文件信息,其中一个寄存器用于存储各级子目录的地址位置信息,另一个用于存储当前目录下的文件信息。
本发明还提出一种装置,该装置使用了本发明提出的FAT文件系统差错处理方法,该装置包括CPU和存储器,其中,存储器内包括一个FAT文件系统,该文件系统中的文件数据还包括一种结构体,这个结构体用于存储文件的地址位置信息;该文件系统还包括一个位置解析模块,这个模块用于当系统第一次访问磁盘根目录时,将根目录内的子目录和文件的地址位置信息返回到应用层;当再需要打开子目录或文件时,由位置解析模块直接读取文件的地址位置信息,打开文件。
上述的装置,一种优选的方案是所述位置解析模块位于文件系统中,是一个应用程序接口。
上述的装置,一种优选的方案是还包括2个寄存器,其中一个用于存储首次浏览根目录时系统返回的各级子目录的地址位置信息,另一个用于存储当前目录下的文件信息。
上述的装置,一种优选的方案是还包括USB模块,用于将该装置与计算机相连。
上述的装置,一种优选的方案是装置的CPU、存储器之间的通信采用DMA方式进行数据传输。
采用本发明的FAT文件系统中基于地址的接口访问方法及其装置,由于文件本身存储了该文件的地址信息,因此搜索文件时,不再需要逐级搜索,省去大量搜索时间,极大的提高了文件浏览效率,非常适用于嵌入式系统。


图1为文件的地址位置信息的结构体示意图;图2为本发明的实施例的模块图。
具体实施例方式
本发明提出的在FAT文件系统中基于位置的接口访问方法,以及使用这种方式的装置,结合附图和实施例说明如下。以下实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由各项权利要求限定。
参照图2,本实施例中,整个FAT文件系统放置在一片音频处理芯片中,这个音频处理芯片包括CPU和存储器部分,其中CPU和存储器之间的数据传输采用现有技术中常用的DMA(直接存储器存取)传输方式。具体在说,在这片音频芯片的存储器中设置了一个FAT文件系统。由于这个FAT文件系统,因此通过它可以完成对外部存储介质的管理,例如通过它读取外部的SD、MMC、NandFlash记忆卡中的数据。这种通过一个文件系统进行对外部存储介质的管理属于现有技术,类似于在通用计算机上通过操作系统完成对USB存储器的管理一样,在此不作赘述。
在这个MCU系统1中,采用51C型CPU作为中央处理器,通过DMA方式与存储器之间通信。本装置采用现有技术中常用的音频处理模块,支持midi、mp3、wave多种格式的音乐播放功能,也支持midi+wave、midi+mp3的播放。这些音乐数据会通过音频混音模块,然后输出到EQ(智能)模块、3D模块,然后输出到扬声器2。
这个MCU系统中还包括USB模块,这个音频处理芯片可以通过该模块与通用计算机(PC)之间进行数据传输。
对于存储在存储器中的文件系统而言,在文件系统中定义文件的位置结构(POS)信息,可以用一个结构体描述typedef struct{unsigned long cluster; /*首簇值*/unsigned long sector; /*当前扇区值*/unsigned long sectorend; /*末扇区值*/unsigned long pos; /*扇区中的表项值*/unsigned long parentclus; /*文件夹或文件所处目录的首簇值*/}F_POS;这个结构体中的信息包括文件或子目录所在的首簇值、文件的起始簇值、当前扇区值、末扇区值、扇区中的entry(表项)值。POS指定了一个文件或子目录在磁盘中的位置,如图1所示。
在本实施例中,POS信息位于文件的末尾,占20字节。由于FAT文件系统中对文件的存储有规定,根据这些规定,文件的末尾通常都会有剩余空间而这些空间是不会被其它文件所占用,而20字节所占用的数据空间特别小,因此,对每个文件增加POS不会对磁盘的空间占用带来负担。
另一方面,在FAT文件系统中设置位置解析模块。这个模块完成应用层与FAT文件系统之间的衔接,负责POS信息的调用。具体的实现方法是,使用一个API(应用程序接口)接口作为这个位置解析模块,实现对POS的调用。这个API使用了参数F_POS,即上文定义的含有位置信息的结构体POS。这样设置之后,对所有文件的读、写、浏览等所有操作都必须通过位置解析模块。由于F_POS参数包含了定位文件存放位置的所有信息,因此位置解析模块根据这些信息找到文件。步骤是(1)按照F_POS结构的簇参数找到首簇,可直接定位文件所处的簇;(2)在首簇下逐个entry的查找,即获取每一个文件名;(3)将所获取的文件名所处的扇区和地址位置信息与已知参数比较,如果完全相同,则返回成功,否则重复步骤(2),直到整个簇搜索完毕,还未找到就返回失败。
例如,当浏览根目录时,采用和现有技术类似的findfirst()和findnext()函数搜索根目录下的所有文件和子目录,根据本发明,需要在这两个函数中添加参数F_POS作为其中的变量。例如,findfirst()可以这样描述
unsigned char f_qfindfirst(F_POS pos,char flag,F_FINDDATA*finddat)这样,系统在搜索根目录返回相关数据时会一并返回POS,这些POS信息将存储在应用层中。在往后的浏览中,就不需要逐级搜索子目录,而是直接调用存储在应用层中的POS信息打开所需目录,调用POS信息所用函数接口可以这样描述UINT8 f_findpath(F_NAME*fsname,F_POS*pos)可见,在首次浏览根目录并获得POS信息后,后续再需要打开文件时,只要直接调用应用层存储的文件POS信息,也就是说直接用文件的地址信息就可以指向文件。这种快速打开文件的操作可以用以下函数实现unsigned char f_qopen(F_POS pos,const char*mode)类似的,创建新文件及其entry的函数接口可以描述为UINT8 f_addentry(F_NAME*fsname,F_POS*pos,F_DIRENTRY**pde)unsigned char f_qcreate(F_POS pos,char flag,const char*name,const char*uname)其中,在创建文件的同时,也创建了文件的POS信息,这个信息占20字节,位于文件的末尾,存储了文件的地址信息。当文件被移动时,这个信息也会相应的更新。
这些函数构成一套API,这个API实现了位置解析模块,因此FAT文件系统在浏览根目录时会获得该目录下所有文件的POS信息,这个POS信息被存储在应用层,方便以后的直接使用,由此实现FAT文件系统中基于位置的接口访问方法。
另外,本实施例中采用了2个buffer(寄存器),其中一个寄存器用于存储首次浏览根目录时系统返回的各级子目录的地址位置信息,另一个用于存储当前目录下的文件信息。同时使用2个寄存器的方案解决了POS信息存储的管理问题,以及进入子目录和返回上级目录时的切换问题。
可见,采用本发明的FAT文件系统中基于地址的接口访问方法,由于文件本身存储了该文件的地址信息,因此搜索文件时,不再需要逐级搜索,只需要在浏览根目录时返回文件的地址信息,后续的操作就可以直接根据文件的地址信息打开文件,省去大量搜索时间,极大的提高了文件浏览效率。这种文件浏览效率的提高,在嵌入式系统中的效果尤其明显。
这种采用了本发明提出的FAT文件系统种基于位置的接口访问方法的FAT文件系统,本领域的技术人员都可以把它应用到其他场合中,例如应用到通用计算机或其他嵌入式开发中。本实施例仅用于支持本发明,本发明的保护范围应该由权利要求书限定。
权利要求
1.一种FAT文件系统中基于位置的接口访问方法,其特征在于包括以下步骤定义一种结构体,这个结构体用于存储地址位置信息;进行位置解析操作,访问磁盘浏览根目录,并将根目录下的子目录和文件的所述结构体中的地址位置信息的返回到应用层;这些地址位置信息存储在寄存器中;当需要打开子目录或文件时,从寄存器中读取文件的地址位置信息。
2.如权利要求1所述的FAT文件系统中基于位置的接口访问方法,其特征在于所定义的结构体包括以下数据文件或子目录所在的首簇值、文件的起始簇值、当前扇区值、末扇区值、扇区中的表项值。
3.如权利要求1所述的FAT文件系统中基于位置的接口访问方法,其特征在于使用多个寄存器存储返回到应用层的文件的地址位置信息。
4.如权利要求3所述的FAT文件系统中基于位置的接口访问方法,其特征在于使用2个寄存器存储文件信息,其中一个寄存器用于存储各级子目录的地址位置信息,另一个用于存储当前目录下的文件信息。
5.一种使用如权利要求1所述的方法的装置,包括CPU和存储器,其特征在于存储器内包括一个FAT文件系统,该文件系统中的文件数据还包括一种结构体,这个结构体用于存储文件的地址位置信息;该文件系统还包括一个位置解析模块,这个模块用于当系统第一次访问磁盘根目录时,将根目录内的子目录和文件的地址位置信息返回到应用层;当再需要打开子目录或文件时,由位置解析模块直接读取文件的地址位置信息,打开文件。
6.如权利要求5所述的装置,其特征在于所述位置解析模块位于文件系统中,是一个应用程序接口。
7.如权利要求5所述的装置,其特征在于还包括2个寄存器,其中一个用于存储首次浏览根目录时系统返回的各级子目录的地址位置信息,另一个用于存储当前目录下的文件信息。
8.如权利要求5所述的装置,其特征在于还包括USB模块,用于将该装置与计算机相连。
9.如权利要求5所述的装置,其特征在于装置的CPU、存储器之间的通信采用DMA方式进行数据传输。
全文摘要
本发明涉及计算机原理领域。本发明提出一种在FAT文件系统中基于位置的接口访问方法,首先为文件设置一个结构体,用于存储文件的地址信息;并设置一个地址解析模块,文件系统对文件的所有操作都经过此模块,保证直接使用文件地址信息对文件进行操作。使用本发明可以省去大量搜索时间,极大的提高了文件浏览效率,尤其适用于嵌入式系统开发。
文档编号G06F17/30GK1776686SQ20051013064
公开日2006年5月24日 申请日期2005年12月16日 优先权日2005年12月16日
发明者孙丰强, 赵原 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1