fatfs文件系解释

上传人:小** 文档编号:90926801 上传时间:2019-06-20 格式:PDF 页数:20 大小:234.78KB
返回 下载 相关 举报
fatfs文件系解释_第1页
第1页 / 共20页
fatfs文件系解释_第2页
第2页 / 共20页
fatfs文件系解释_第3页
第3页 / 共20页
fatfs文件系解释_第4页
第4页 / 共20页
fatfs文件系解释_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《fatfs文件系解释》由会员分享,可在线阅读,更多相关《fatfs文件系解释(20页珍藏版)》请在金锄头文库上搜索。

1、1 1. 1. 1. 1.FATFSFATFSFATFSFATFS 结构,文件系统对象结构体,所在文件结构,文件系统对象结构体,所在文件 ff.hff.hff.hff.h。 FATFS 结构(文件系统对象)用来保存独立逻辑驱动器动态工作区域。 这个结构由应用程序给定, 使用 f_mount 函数注册/注销FatFs 模块。在执行 f_mount 或媒体发生变化后,访问第一个文件时 FATFS 被初始化。其 他应用程序不能改变结构的任何成员变量。 typedef struct BYTEfs_type;/* FAT 子类型,一般在 mount 时用,置 0 表示未挂载*/ BYTEdrv;/* 物

2、理驱动器号,一般为 0*/ BYTEcsize;/*每个簇的扇区数目(1,2,4.128)*/ BYTEn_fats;/* 文件分配表的数目(1,2) ,FAT 文件系统依次为:引导扇区、两个文件分配表、 根目录区和数据区*/ BYTEwflag;/*标记文件是否被改动过,为 1 时要回写*/ BYTEfsi_flag;/* 标记文件系统信息是否被改动过,为 1 时要回写*/ WORDid;/* 文件系统挂载 ID */ WORDn_rootdir;/* 根目录区入口(目录项)的个数(用于 FAT12/16)*/ #if _MAX_SS != 512 WORDssize;/* 每扇区的字节数(

3、用于扇区大于 512Byte 的 flash) */ #endif #if _FS_REENTRANT _SYNC_t sobj;/* 允许重入,即定义同步对象,用在 tiny 中*/ #endif #if !_FS_READONLY DWORDlast_clust;/* 最后一个被分配的簇*/ DWORDfree_clust;/* 空闲簇数目*/ DWORDfsi_sector;/* 存放 fsinfo 的扇区(用于FAT32)*/ #endif #if _FS_RPATH DWORDcdir;/* 允许相对路径时用,存储当前目录起始簇(0:root)*/ #endif DWORDn_fat

4、ent;/* FAT 目录数(簇的数目 + 2)*/ DWORDfsize;/* 每个 FAT 所占扇区*/ DWORDfatbase;/* FAT 起始扇区*/ DWORDdirbase;/* 根目录起始扇区(FAT32:Cluster#) */ DWORDdatabase;/* 数据目录起始扇区*/ DWORDwinsect;/* 当前缓冲区中存储的扇区号*/ BYTEwin_MAX_SS;/* 单个扇区缓存,FAT(and Data on tiny cfg) */ FATFS; 2. 2. 2. 2.FILFILFILFIL 结构,文件对象结构。所在文件结构,文件对象结构。所在文件 ff

5、.hff.hff.hff.h。 FIL 结构(文件对象)用来保存打开文件的状态。 它由 f_open 函数创建,由 f_cl 函数废弃。除 cltbl 外, 其 成员不能被其他应用程序改变。注意:在 non-tiny 配置况下,在结构体中定义了一个扇区缓冲区,因此 FIL 结构不能够被定义为自动变量 typedef struct FATFS*fs;/* 所在的文件系统指针*/ WORDid;/* 所在的文件系统挂载编号*/ BYTEflag;/* 文件状态*/ 2 BYTEpad1;/* 不知道含义,也未见程序使用*/ DWORDfptr;/* 文件读写指针*/ DWORDfsize;/* 文

6、件大小*/ DWORDsclust;/* 文件起始簇(fsize=0 时为 0) */ DWORDclust;/* 当前簇*/ DWORDdsect;/* 当前数据扇区*/ #if !_FS_READONLY DWORDdir_sect;/* 包含目录项的扇区 */ BYTE*dir_ptr;/* 目录入口指针 */ #endif #if _USE_FASTSEEK DWORD*cltbl;/*指向簇链接映射表的指针*/ (Nulled on file open) */ #endif #if _FS_SHARE UINTlockid;/* 文件锁 ID */ #endif #if !_FS_T

7、INY BYTEbuf_MAX_SS;/* 数据读写缓冲区*/ #endif FIL; 3. 3. 3. 3.DIRDIRDIRDIR 结构,目录对象结构体。所在文件结构,目录对象结构体。所在文件 ff.hff.hff.hff.h。 DIR 结构体被 f_opendir,f_readdir 函数用来读取工作区目录。其他应用程序不能改变其成员变量。 typedef struct FATFS*fs;/* 所在的文件系统指针*/ WORDid;/* 所在的文件系统挂载编号*/ WORDindex;/* 当前读写目录索引号 */ DWORDsclust;/* 目录表起始簇 ,0 表示根目录*/ DWO

8、RDclust;/* 当前簇 */ DWORDsect;/* 当前扇区 */ BYTE*dir;/* 当前文件(SFN,短文件名)入口指针 */ BYTE*fn;/* 文件指针 (in/out) file8,ext3,status1 */ #if _USE_LFN WCHAR*lfn;/* 长文件名缓冲区指针 */ WORDlfn_idx;/* 最后匹配的长文件名索引号 (0xFFFF:No LFN) */ #endif DIR; 3 FatFsFatFsFatFsFatFs FatFS 是一个为小型嵌入式系统设计的通用 FAT(FileAllocation Table)文件系统模块。FatF

9、s 的编写遵循 ANSI C,并且完全与 磁盘 I/O 层分开。 因此, 它独立(不依赖)于硬件架构。 它可以被嵌入到低成本的微控制器中, 如AVR,8051, PIC,ARM, Z80, 68K 等等,而不需要做任何修改。 特点特点 Windows 兼容的 FAT 文件系统 不依赖于平台,易于移植 代码和工作区占用空间非常小 多种配置选项: 多卷(物理驱动器和分区) 多 ANSI/OEM 代码页,包括 DBCS 在 ANSI/OEM 或 Unicode 中长文件名的支持 RTOS 的支持 多扇区大小的支持 只读,最少 API,I/O 缓冲区等等 应用程序接口应用程序接口 FatFs 模块为应

10、用程序提供了下列函数,这些函数描述了 FatFs 能对 FAT 卷执行哪些操作。 f_mountf_mountf_mountf_mount 在 FatFs 模块上注册/注销一个工作区(文件系统对象) FRESULT f_mount ( BYTEDrive,/* 逻辑驱动器号 */ FATFS*FileSystemObject /* 工作区指针 */ ); 参数 Drive 注册/注销工作区的逻辑驱动器号(0-9)。 FileSystemObject 工作区(文件系统对象)指针。 返回值 FR_OK (0)函数成功。 FR_INVALID_DRIVE 驱动器号无效 描述 f_mount 函数在

11、FatFs 模块上注册/注销一个工作区。 在使用任何其他文件函数之前,必须使用该函数为每个卷注册一个工作 4 区。要注销一个工作区,只要指定 FileSystemObject 为 NULL 即可,然后该工作区可以被丢弃。 该函数只初始化给定的工作区,以及将该工作区的地址注册到内部表中,不访问磁盘 I/O 层。卷装入过程是在 f_mount 函数 后或存储介质改变后的第一次文件访问时完成的。 f_openf_openf_openf_open 创建/打开一个用于访问文件的文件对象 FRESULT f_open ( FIL* FileObject,/* 空白文件对象结构指针 */ const XCH

12、AR* FileName,/* 文件名指针 */ BYTE ModeFlags/* 模式标志 */ ); 参数 FileObject 将被创建的文件对象结构的指针。 FileName NULL 结尾的字符串指针,该字符串指定了将被创建或打开的文件名。 ModeFlags 指定文件的访问类型和打开方法。它是由下列标志的一个组合指定的。 模式模式描述描述 FA_READFA_READFA_READFA_READ 指定读访问对象。可以从文件中读取数据。 与 FA_WRITE 结合可以进行读写访问。 FA_WRITEFA_WRITEFA_WRITEFA_WRITE 指定写访问对象。可以向文件中写入数据

13、。 与 FA_READ 结合可以进行读写访问。 FA_OPEN_EXISTFA_OPEN_EXISTFA_OPEN_EXISTFA_OPEN_EXIST INGINGINGING 打开文件。如果文件不存在,则打开失败。(默认) FA_OPEN_ALWAFA_OPEN_ALWAFA_OPEN_ALWAFA_OPEN_ALWA YSYSYSYS 如果文件存在,则打开;否则,创建一个新文件。 FA_CREATE_NEFA_CREATE_NEFA_CREATE_NEFA_CREATE_NE WWWW 创建一个新文件。如果文件已存在,则创建失败。 FA_CREATE_ALFA_CREATE_ALFA_C

14、REATE_ALFA_CREATE_AL WAYSWAYSWAYSWAYS 创建一个新文件。如果文件已存在,则它将被截断并覆盖。 注意:当 _FS_READONLY= 1 时,模式标志 FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYS 是无效的。 返回值 FR_OK (0)函数成功,该文件对象有效。 FR_NO_FILE 找不到该文件。 FR_NO_PATH 找不到该路径。 FR_INVALID_NAME 文件名无效。 FR_INVALID_DRIVE 驱动器号无效。 FR_EXIST 该文件已存在。 FR_DENIED 由于下

15、列原因,所需的访问被拒绝: 以写模式打开一个只读文件。 由于存在一个同名的只读文件或目录,而导致文件 无法被创建。 由于目录表或磁盘已满,而导致文件无法被创建。 FR_NOT_READY由于驱动器中没有存储介质或任何其他原 因,而导致磁盘驱动器无法工作。 FR_WRITE_PROTECTED 在存储介质被写保护的情况下, 以写模式打开或创建文件对象。 FR_DISK_ERR 由于底层磁盘 I/O 接口函数中的一个错误, 而导致该函数失败。 FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误, 而 导致该函数失败。 FR_NOT_ENABLED 逻辑驱动器没有工作区。 FR_NO_

16、FILESYSTEM 磁盘上没有有效地 FAT 卷。 5 描述 如果函数成功,则创建一个文件对象。该文件对象被后续的读/写函数用来访问文件。如果想要关闭一个打开的文件对象,则 使用 f_close 函数。如果不关闭修改后的文件,那么文件可能会崩溃。 在使用任何文件函数之前,必须使用 f_mount 函数为驱动器注册一个工作区。只有这样,其他文件函数才能正常工作。 例子(文件拷贝) void main (void) FATFSfs2;/* 逻辑驱动器的工作区(文件系 统对象) */ FIL fsrc, fdst;/* 文件对象 */ BYTE buffer4096;/* 文件拷贝缓冲区 */ FRESULT res;/* FatFs 函数公共结果代码 */ UINT br, bw;/* 文件读/写字节计数 */ /* 为逻辑驱动器注册工作区 */ f_mount(0, f_mount(1, /* 打开驱动器 1 上的源文件 */ res = f_open( if (res) die(res); /* 在驱动器

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号