CN102426586B - 一种嵌入式系统中的fat文件存储方法 - Google Patents
一种嵌入式系统中的fat文件存储方法 Download PDFInfo
- Publication number
- CN102426586B CN102426586B CN201110327108.8A CN201110327108A CN102426586B CN 102426586 B CN102426586 B CN 102426586B CN 201110327108 A CN201110327108 A CN 201110327108A CN 102426586 B CN102426586 B CN 102426586B
- Authority
- CN
- China
- Prior art keywords
- file
- fat
- storage
- search
- directory entry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的名称是一种嵌入式系统中的FAT文件存储方法。本发明使用的硬件包括嵌入式系统主机、外接存储设备,所述嵌入式系统主机支持USB HOST,所述外接存储设备的文件系统是FAT文件系统格式,所述嵌入式系统主机和外接存储设备通过USB方式连接和通讯,本发明采用同时搜索空闲簇和已被删除目录项的方式,一旦搜索到两者之一,就创建目录项,减少创建FAT文件目录项的时间。本发明应用于嵌入式系统的FAT文件存储领域。
Description
技术领域
本发明涉及一种嵌入式系统中的FAT文件存储方法,尤其涉及一种在嵌入式系统中采用FAT文件系统进行数据存储的方法。
背景技术
随着电子技术的发展,越来越多的电子产品应用嵌入式系统。随着用户需求的扩展,需要将这些电子产品的数据存储到设备外的存储设备上,比较通用的存储设备有U盘、SD卡等。同时,如果需要通过PC机等带操作系统的设备来识别和读取存储到这些存储设备的数据,则需要这些嵌入式系统将导出的数据按目前主流的文件格式存储,例如FAT文件系统格式。
FAT文件系统的原理可以简单的描述为把存储空间分块映射到一个表中,从而实现对存储空间的灵活支配。存储空间中的每一个块被称为簇,存储空间的映射表被称作FAT表,系统中文件的存储不必是连续的,在FAT表中可用链表的形式把文件联系在一起。FAT文件系统的基本结构,主要由以下三部分组成:依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。FAT文件系统还包括目录项,除了根目录的所有文件都对应一组数据作为文件来描述,称为文件目录项。每个文件目录项内的所有文件和子目录的文件目录项都存储在这个目录对应的存储空间内,主要包括文件名、文件属性、文件大小、文件存储位置以及一系列的事件描述等。把文件路径、文件目录项和FAT表联系在一起即可把握一个文件在硬盘中的存储情况,具体通过以下步骤定位文件的所有内容:1. 通过路径找到文件所在目录的簇;2. 在目录对应的空间内比对文件名,找到文件对应的文件目录项;3. 通过文件目录项确定文件的起始簇和文件大小;4. 根据FAT表内的簇链确定文件的存储空间。
嵌入式系统的优点是低功耗、低成本,因此其硬件资源比PC机更简单,因此嵌入式系统的处理速度也更低。如果完全按照PC机上的FAT文件系统格式存储,嵌入式系统将会耗费更长的运行时间和更多的系统资源。例如,当一个应用嵌入式系统的设备外接一个存储数据较多的U盘时,要从该设备中导出一个文件到U盘中,一般耗费的时间较长,其中,主要的耗时因为在创建FAT文件目录项的时候需要遍历U盘的FAT文件目录表,具体的做法是先搜索空闲簇,如果找不到空闲簇再回头搜索已删除的目录项。这样,由于导出文件的时候创建文件目录项耗时较长,则会导致系统其他程序的响应时间变慢,影响了系统的实时性。
发明内容
本发明所要解决的技术问题是提供一种嵌入式系统中的FAT文件存储方法,采用同时搜索空闲簇和已被删除目录项的方式,一旦搜索到两者之一,就创建目录项,减少创建FAT文件目录项的时间,以至少解决背景技术中的问题。
本发明采用的解决方案是,一种嵌入式系统中的FAT文件存储方法,使用的硬件包括嵌入式系统主机、外接存储设备,所述嵌入式系统主机支持USB HOST,所述外接存储设备的文件系统是FAT文件系统格式,所述嵌入式系统主机和外接存储设备通过USB方式连接和通讯,该方法包括:(A)检测连接的过程、(B)判断是否满足存储条件的过程、(C)存储文件的过程,其特征在于,所述(C)存储文件的过程包括以下步骤:
步骤C1:同时搜索空闲簇和已被删除文件的目录项,一旦搜索到其中之一满足创建目录项条件,即在文件目录表中创建目录项;
步骤C2:从空闲区链的始端开始搜索,选择第一个满足空间要求的空闲区,为文件分配存储空间;
步骤C3:写FAT文件目录表;
步骤C4:写文件数据内容,将要存储的文件数据写入步骤C2分配的存储空间;
步骤C5:存储成功,更新FAT文件目录表,关闭文件。
进一步的,所述(A)检测连接的过程具体包括:嵌入式系统主机检测到通过USB接口连接的外接存储设备后,通过枚举过程获取到所连接的外接存储设备的信息。
进一步的,所述获取到所连接的外接存储设备的信息至少包括容量、簇、扇区、FAT文件目录表。
进一步的,所述(B)判断是否满足存储条件的过程具体包括:
步骤B1:嵌入式系统主机判断外接存储设备是否FAT文件系统,剩余空间容量是否满足存储需求,外接存储设备是否处于持续连接状态,如果满足则继续下一步骤,不满足则退出存储;
步骤B2:搜索外接存储设备中是否存在与要存储的文件同名的文件,如果不存在则转入步骤C1,存在则继续下一步骤;
步骤B3:提示有同名文件存在,询问是否覆盖,如果选择“是”则转入(C)存储文件的过程的步骤C2,选择“否”则退出文件存储。
进一步的,所述步骤B2中搜索同名文件具体包括以下内容:首先根据FAT文件目录表的特性,将每个FAT文件目录表按每个目录项32个字节划分成N个目录项;然后搜索每个目录项的第0个字节,直到遇到0x00结束,其中,目录项的第0个字节是0x00表示该目录表存储的目录项到此为止。
进一步的,如果所述步骤B3中选择覆盖同名文件,则所述步骤C2中是把FAT文件目录表中原有的文件目录项的起始存储空间初始化为文件存储空间的起始地址,文件的起始长度为0。
进一步的,所述步骤C1具体包括以下内容:搜索FAT文件目录表;当首先搜索到空闲簇,则将该地址分配给所要存储的文件;当首先搜索到已被删除目录项的文件时,记录其文件存储空间、文件长度信息,在该已被删除目录项的位置创建所要存储的文件的目录项,将已删除的文件存储空间的起始地址分配给所要存储的文件。
进一步的,搜索FAT文件目录表的目录项的第0个字节是0xE5H表示该目录项对应的文件是被删除的,第0个字节是0x00H表示该目录项是空闲目录项。
进一步的,所述步骤C2搜索可用的簇来存储文件数据,具体是:可用的簇是通过查找FAT文件目录表来实现,FAT文件目录表的前8个字节 “F8 FF FF 0F FF FF FF FF”为FAT32的FAT表头标记,用以表示此处是FAT表的开始,后面的数据每四个字节为一个簇项(从第2簇开始),用以标记此簇的下一个簇号,当该簇项是“00 00 00 00”时则表示该簇未被使用。
进一步的,所述步骤C1和步骤C2的搜索过程,还包括一个搜索计数器,根据系统对实时性的需求,为计数器设置一个阈值,当超过该阈值还未搜索到,则记录此时搜索位置,并跳出搜索循环执行其他任务,当下一个搜索周期时间到时,则从上次的搜索位置处继续搜索。
进一步的,所述步骤C5中更新FAT文件目录表,是把目前已存储文件数据的长度、存储时间信息写入步骤C1创建的文件目录项中。
本发明采用上述方法,与现有技术相比,具有以下优点:
1. 本发明采用同时搜索空闲簇和已被删除目录项的方式,一旦搜索到两者之一,就创建目录项,即使一个文件具备多个目录项,充分利用FAT文件表链式管理的优点,不需要让目录项均为连续,减少了创建FAT文件目录项的时间;
2.本发明的所述步骤C1和步骤C2的搜索过程,还包括一个搜索计数器,使用该搜索计数器进行断点搜索的方式,让系统在创建目录项的过程中消耗更少的系统资源,对于那些实时性要求很高的嵌入式系统,可在创建目录项的搜索过程中,及时响应一些特殊任务;
3.当遇到文件目录表比较大,且空闲目录项在较后面甚至已经无空闲目录项的情况,搜索完文件目录表之后再回头搜索已被删除目录项进行创建新目录项,比较耗费时间,本发明的步骤C1同时搜索已被删除目录项,并在已被删除目录项的位置创建所要存储的文件的目录项,将已删除的文件存储空间的起始地址分配给所要存储的文件,节省了创建目录项所耗费的时间。
附图说明
图1是本发明中实施例的文件存储方法流程图。
具体实施方式
现结合附图和具体实施方式对本发明进一步说明。
如图1所示,一种嵌入式系统中的FAT文件存储方法,使用的硬件包括嵌入式系统主机、外接存储设备,所述嵌入式系统主机支持USB HOST,所述外接存储设备的文件系统是FAT文件系统格式,所述嵌入式系统主机和外接存储设备通过USB方式连接和通讯,该方法包括以下步骤:
步骤1:嵌入式系统主机检测到通过USB接口连接的外接存储设备后,通过枚举过程获取到所连接的外接存储设备的信息,包括容量、簇、扇区、FAT文件目录表等相关信息;
步骤2:嵌入式系统主机判断连接的外接存储设备是否FAT文件系统,剩余空间容量是否满足存储需求,外接存储设备是否处于持续连接状态,如果满足则继续下一步骤,不满足则退出存储;
步骤3:搜索外接存储设备中是否存在与要存储的文件同名的文件,如果不存在则转入步骤5,存在则继续下一步骤;
步骤4:提示有同名文件存在,询问是否覆盖,如果选择“是”则转入步骤6,选择“否”则退出文件存储;
步骤5:同时搜索空闲簇和已被删除文件的目录项,一旦搜索到其中之一满足创建目录项条件,即在文件目录表中创建目录项;
步骤6:从空闲区链的始端开始搜索,选择第一个满足空间要求的空闲区,为文件分配存储空间;
步骤7:写FAT文件目录表;
步骤8:写文件数据内容,将要存储的文件数据写入步骤6分配的存储空间;
步骤9:存储成功,更新FAT文件目录表,是把目前已存储文件数据的长度、存储时间信息写入步骤5创建的文件目录项中,关闭文件。
进一步的,所述步骤3中搜索同名文件具体包括以下内容:首先根据FAT文件目录表的特性,将每个FAT文件目录表按每个目录项32个字节划分成N个目录项;然后搜索每个目录项的第0个字节,直到遇到0x00结束,其中,目录项的第0个字节是0x00表示该目录表存储的目录项到此为止。
进一步的,如果所述步骤3中存在同名文件,则所述步骤6中是把FAT文件目录表中原有的文件目录项的起始存储空间初始化为文件存储空间的起始地址,文件的起始长度为0。
进一步的,所述步骤5具体包括以下内容:搜索FAT文件目录表,目录项的第0个字节是0xE5H表示该目录项对应的文件是被删除的,第0个字节是0x00H表示该目录项是空闲目录项;当首先搜索到空闲簇,则将该地址分配给所要存储的文件;当首先搜索到已被删除目录项的文件时,记录其文件存储空间、文件长度信息,在该已被删除目录项的位置创建所要存储的文件的目录项,将已删除的文件存储空间的起始地址分配给所要存储的文件。
进一步的,所述步骤5和步骤6均包括搜索过程,步骤5搜索FAT文件目录表的目录项,步骤6搜索可用的簇来存储文件数据,可用的簇是通过查找FAT文件目录表来实现的,FAT文件目录表的前8个字节 “F8 FF FF 0F FF FF FF FF”为FAT32的FAT表头标记,用以表示此处是FAT表的开始,后面的数据每四个字节为一个簇项(从第2簇开始),用以标记此簇的下一个簇号,当该簇项是“00 00 00 00”时则表示该簇未被使用。为提高实时性,步骤5和步骤6的搜索过程还包括一个搜索计数器,根据系统对实时性的需求,为计数器设置一个阈值,当超过该阈值还未搜索到,则记录此时搜索位置,并跳出搜索循环执行其他任务,当下一个搜索周期时间到时,则从上次的搜索位置处继续搜索。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (11)
1.一种嵌入式系统中的FAT文件存储方法,使用的硬件包括嵌入式系统主机、外接存储设备,所述嵌入式系统主机支持USB HOST,所述外接存储设备的文件系统是FAT文件系统格式,所述嵌入式系统主机和外接存储设备通过USB方式连接和通讯,该方法包括:(A)检测连接的过程、(B)判断是否满足存储条件的过程、(C)存储文件的过程,其特征在于,所述(C)存储文件的过程包括以下步骤:
步骤C1:同时搜索空闲簇和已被删除文件的目录项,一旦搜索到其中之一满足创建目录项条件,即在文件目录表中创建目录项;
步骤C2:从空闲区链的始端开始搜索,选择第一个满足空间要求的空闲区,为文件分配存储空间;
步骤C3:写FAT文件目录表;
步骤C4:写文件数据内容,将要存储的文件数据写入步骤C2分配的存储空间;
步骤C5:存储成功,更新FAT文件目录表,关闭文件。
2.根据权利要求1所述的FAT文件存储方法,其特征在于:所述(A)检测连接的过程具体包括:嵌入式系统主机检测到通过USB接口连接的外接存储设备后,通过枚举过程获取到所连接的外接存储设备的信息。
3.根据权利要求2所述的FAT文件存储方法,其特征在于:所述获取到所连接的外接存储设备的信息至少包括容量、簇、扇区、FAT文件目录表。
4.根据权利要求1所述的FAT文件存储方法,其特征在于,所述(B)判断是否满足存储条件的过程具体包括:
步骤B1:嵌入式系统主机判断外接存储设备是否FAT文件系统,剩余空间容量是否满足存储需求,外接存储设备是否处于持续连接状态,如果满足则继续下一步骤,不满足则退出存储;
步骤B2:搜索外接存储设备中是否存在与要存储的文件同名的文件,如果不存在则转入步骤C1,存在则继续下一步骤;
步骤B3:提示有同名文件存在,询问是否覆盖,如果选择“是”则转入(C)存储文件的过程的步骤C2,选择“否”则退出文件存储。
5.根据权利要求4所述的FAT文件存储方法,其特征在于,所述步骤B2中搜索同名文件具体包括以下内容:首先根据FAT文件目录表的特性,将每个FAT文件目录表按每个目录项32个字节划分成N个目录项;然后搜索每个目录项的第0个字节,直到遇到0x00结
束,其中,目录项的第0个字节是0x00表示该目录表存储的目录项到此为止。
6.根据权利要求4所述的FAT文件存储方法,其特征在于,如果所述步骤B3中选择覆盖同名文件,则所述步骤C2中是把FAT文件目录表中原有的文件目录项的起始存储空间初始化为文件存储空间的起始地址,文件的起始长度为0。
7.根据权利要求1所述的FAT文件存储方法,其特征在于,所述步骤C1具体包括以下内容:搜索FAT文件目录表;当首先搜索到空闲簇,则将地址分配给所要存储的文件;当首先搜索到已被删除目录项的文件时,记录其文件存储空间、文件长度信息,在该已被删除目录项的位置创建所要存储的文件的目录项,将已删除的文件存储空间的起始地址分配给所要存储的文件。
8.根据权利要求5所述的FAT文件存储方法,其特征在于,搜索FAT文件目录表的目录项的第0个字节是0xE5H表示该目录项对应的文件是被删除的,第0个字节是0x00H表示该目录项是空闲目录项。
9.根据权利要求1所述的FAT文件存储方法,其特征在于,所述步骤C2搜索可用的簇来存储文件数据,具体是:可用的簇是通过查找FAT文件目录表来实现,FAT文件目录表的前8个字节“F8FF FF 0F FF FF FF FF”为FAT32的FAT表头标记,用以表示此处是FAT表的开始,从第2簇开始,后面的数据每四个字节为一个簇项,用以标记此簇的下一个簇号,当该簇项是“00000000”时则表示该簇未被使用。
10.根据权利要求1所述的FAT文件存储方法,其特征在于,所述步骤C1和步骤C2的搜索过程,还包括一个搜索计数器,根据系统对实时性的需求,为计数器设置一个阈值,当超过该阈值还未搜索到,则记录此时搜索位置,并跳出搜索循环执行其他任务,当下一个搜索周期时间到时,则从上次的搜索位置处继续搜索。
11.根据权利要求1所述的FAT文件存储方法,其特征在于,所述步骤C5中更新FAT文件目录表,是把目前已存储文件数据的长度、存储时间信息写入步骤C1创建的文件目录项中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110327108.8A CN102426586B (zh) | 2011-10-25 | 2011-10-25 | 一种嵌入式系统中的fat文件存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110327108.8A CN102426586B (zh) | 2011-10-25 | 2011-10-25 | 一种嵌入式系统中的fat文件存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102426586A CN102426586A (zh) | 2012-04-25 |
CN102426586B true CN102426586B (zh) | 2017-02-08 |
Family
ID=45960567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110327108.8A Active CN102426586B (zh) | 2011-10-25 | 2011-10-25 | 一种嵌入式系统中的fat文件存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102426586B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104007939A (zh) * | 2014-06-23 | 2014-08-27 | 深圳供电局有限公司 | 用于小文件频繁写入的嵌入式fat文件系统及方法 |
CN104657471B (zh) * | 2015-02-13 | 2020-05-12 | 厦门雅迅网络股份有限公司 | 一种fat文件系统的预分配文件建立方法及系统 |
CN106372080A (zh) * | 2015-07-22 | 2017-02-01 | 安恒通(北京)科技有限公司 | 一种文件清除方法、装置和系统 |
CN106326384A (zh) * | 2016-08-16 | 2017-01-11 | 中国科学院长春光学精密机械与物理研究所 | 基于fpga的适用于高速海量存储的文件存储方法 |
CN107229421B (zh) * | 2017-05-31 | 2020-08-04 | 浙江大华技术股份有限公司 | 视频数据存储系统的创建、文件写入和读取方法及装置 |
CN108021717B (zh) * | 2017-12-29 | 2020-12-01 | 成都三零嘉微电子有限公司 | 一种轻量级嵌入式文件系统的实现方法 |
CN109189772B (zh) * | 2018-08-21 | 2021-09-28 | 华清瑞达(天津)科技有限公司 | 用于无文件系统存储介质的文件管理方法及系统 |
CN111159114A (zh) * | 2019-12-30 | 2020-05-15 | 中国科学院寒区旱区环境与工程研究所 | 文件存储方法、装置及服务器 |
CN112181918B (zh) * | 2020-09-30 | 2023-03-03 | 上海商米科技集团股份有限公司 | 一种用于嵌入式系统的摄像机录像文件快速预分配方法 |
CN117453632B (zh) * | 2023-12-25 | 2024-04-12 | 杭州计算机外部设备研究所(中国电子科技集团公司第五十二研究所) | 一种数据存储方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5715455A (en) * | 1995-05-18 | 1998-02-03 | International Business Machines Corporation | Apparatus and method for storing file allocation table efficiently in memory |
CN1959677A (zh) * | 2006-11-29 | 2007-05-09 | 北京中星微电子有限公司 | 一种文件系统的目录项整理方法 |
-
2011
- 2011-10-25 CN CN201110327108.8A patent/CN102426586B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5715455A (en) * | 1995-05-18 | 1998-02-03 | International Business Machines Corporation | Apparatus and method for storing file allocation table efficiently in memory |
CN1959677A (zh) * | 2006-11-29 | 2007-05-09 | 北京中星微电子有限公司 | 一种文件系统的目录项整理方法 |
Non-Patent Citations (2)
Title |
---|
基于CH375的嵌入式系统USB主机设计;邹垚 等;《微计算机信息》;20101031;第26卷(第29期);第67-69页 * |
基于海量存储类的嵌入式USB主机设计;廖俊卿;《电脑知识与技术》;20100630;第6卷(第17期);第4699-4701 * |
Also Published As
Publication number | Publication date |
---|---|
CN102426586A (zh) | 2012-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102426586B (zh) | 一种嵌入式系统中的fat文件存储方法 | |
CN102301349B (zh) | 访问存储控制器控制的存储芯片中根据列条带化的行数据 | |
CN102103567B (zh) | 在异构处理器之间共享基于虚拟存储器的多版本数据 | |
US10585691B2 (en) | Distribution system, computer, and arrangement method for virtual machine | |
CN102063943B (zh) | Nand闪存参数自动检测系统 | |
CN102246151B (zh) | 存储器装置及其控制方法 | |
US8176100B2 (en) | System for storing and managing objects | |
CN107479922A (zh) | 一种闪存数据管理方法、装置及计算机可读存储介质 | |
CN109960686A (zh) | 数据库的日志处理方法和装置 | |
US20160019206A1 (en) | Methods and systems to identify and use event patterns of application workflows for data management | |
CN102243660A (zh) | 一种数据访问方法及设备 | |
CN102937964B (zh) | 基于分布式系统的智能数据服务方法 | |
CN107193871A (zh) | 数据库修复方法及装置 | |
US20180284999A1 (en) | Data Migration with Application-Native Export and Import Capabilities | |
CN102915340A (zh) | 一种扩展的基于b+树对象文件系统 | |
JP2010067266A (ja) | コンピュータ実装方法、周辺装置及びコンピュータ・プログラム | |
CN107844519A (zh) | 电子装置、数据库查询脚本生成方法及存储介质 | |
CN103123651B (zh) | 一种查看多个同类文件的方法、装置和移动设备 | |
CN110008030A (zh) | 一种元数据访问的方法、系统及设备 | |
CN109491962A (zh) | 一种文件目录树管理方法及相关装置 | |
US8131966B2 (en) | System and method for storage structure reorganization | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 | |
CN101303667B (zh) | 建立磁盘空簇表及查找磁盘空簇的方法和装置 | |
CN102955787A (zh) | 一种文件目录表的使用方法、文件写入方法及应用的主电路板、cpu和外部存储器 | |
CN202855261U (zh) | 异步led显示屏全彩同步播放控制系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |