好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

FATFS文件系统接口函数.doc

20页
  • 卖家[上传人]:油条
  • 文档编号:11016826
  • 上传时间:2017-10-16
  • 文档格式:DOC
  • 文档大小:134.42KB
  • / 20 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 11. FATFS 结构,文件系统对象结构体,所在文件 ff.h FATFS 结构(文件系统对象)用来保存独立逻辑驱动器动态工作区域这个结构由应用程序给定,使用f_mount 函数注册/注销 FatFs 模块在执行 f_mount 或媒体发生变化后,访问第一个文件时 FATFS 被初始化其他应用程序不能改变结构的任何成员变量 typedef struct { BYTE fs_type; /* FAT 子类型,一般在 mount 时用,置 0 表示未挂载*/ BYTE drv; /* 物理驱动器号,一般为 0*/ BYTE csize; /*每个簇的扇区数目(1,2,4...128) */ BYTE n_fats; /* 文件分配表的数目(1,2) ,FAT 文件系统依次为:引导扇区、两个文件分配表、根目录区和数据区*/ BYTE wflag; /*标记文件是否被改动过,为 1 时要回写*/ BYTE fsi_flag; /* 标记文件系统信息是否被改动过,为 1 时要回写*/ WORD id; /* 文件系统挂载 ID */ WORD n_rootdir; /* 根目录区入口( 目录项) 的个数(用于 FAT12/16)*/ #if _MAX_SS != 512 WORD ssize; /* 每扇区的字节数(用于扇区大于 512Byte 的 flash) */ #endif #if _FS_REENTRANT _SYNC_t sobj; /* 允许重入,即定义同步对象,用在 tiny 中*/ #endif #if !_FS_READONLY DWORD last_clust; /* 最后一个被分配的簇 */ DWORD free_clust; /* 空闲簇数目*/ DWORD fsi_sector; /* 存放 fsinfo 的扇区(用于 FAT32) */ #endif #if _FS_RPATH DWORD cdir; /* 允许相对路径时用,存储当前目录起始簇(0:root)*/ #endif DWORD n_fatent; /* FAT 目录数( 簇的数目 + 2)*/ DWORD fsize; /* 每个 FAT 所占扇区*/ DWORD fatbase; /* FAT 起始扇区*/ DWORD dirbase; /* 根目录起始扇区(FAT32:Cluster#) */ DWORD database; /* 数据目录起始扇区*/ DWORD winsect; /* 当前缓冲区中存储的扇区号*/ BYTE win[_MAX_SS]; /* 单个扇区缓存, FAT (and Data on tiny cfg) */ } FATFS; 2. FIL 结构,文件对象结构。

      所在文件 ff.h FIL 结构(文件对象)用来保存打开文件的状态 它由 f_open 函数创建,由 f_cl 函数废弃除 cltbl 外,其成员不能被其他应用程序改变注意:在 non-tiny 配置况下,在结构体中定义了一个扇区缓冲区,因此FIL 结构不能够被定义为自动变量typedef struct { FATFS* fs; /* 所在的文件系统指针*/ WORD id; /* 所在的文件系统挂载编号 */ BYTE flag; /* 文件状态*/ 2BYTE pad1; /* 不知道含义,也未见程序使用*/ DWORD fptr; /* 文件读写指针*/ DWORD fsize; /* 文件大小*/ DWORD sclust; /* 文件起始簇(fsize=0 时为 0) */ DWORD clust; /* 当前簇*/ DWORD dsect; /* 当前数据扇区*/ #if !_FS_READONLY DWORD dir_sect; /* 包含目录项的扇区 */ BYTE* dir_ptr; /* 目录入口指针 */ #endif #if _USE_FASTSEEK DWORD* cltbl; /*指向簇链接映射表的指针 */ (Nulled on file open) */ #endif #if _FS_SHARE UINT lockid; /* 文件锁 ID */ #endif #if !_FS_TINY BYTE buf[_MAX_SS]; /* 数据读写缓冲区*/ #endif } FIL; 3. DIR 结构,目录对象结构体。

      所在文件 ff.h DIR 结构体被 f_opendir,f_readdir 函数用来读取工作区目录其他应用程序不能改变其成员变量 typedef struct { FATFS* fs; /* 所在的文件系统指针*/ WORD id; /* 所在的文件系统挂载编号 */ WORD index; /* 当前读写目录索引号 */ DWORD sclust; /* 目录表起始簇 ,0 表示根目录*/ DWORD clust; /* 当前簇 */ DWORD sect; /* 当前扇区 */ BYTE* dir; /* 当前文件(SFN,短文件名 )入口指针 */ BYTE* fn; /* 文件指针 (in/out) {file[8],ext[3],status[1]} */ #if _USE_LFN WCHAR* lfn; /* 长文件名缓冲区指针 */ WORD lfn_idx; /* 最后匹配的长文件名索引号 (0xFFFF:No LFN) */ #endif } DIR; 3FatFs FatFS 是一个为小型嵌入式系统设计的通用 FAT(File Allocation Table)文件系统模块。

      FatFs 的编写遵循 ANSI C,并且完全与磁盘 I/O 层分开因此,它独立 (不依赖)于硬件架构它可以被嵌入到低成本的微控制器中,如 AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改特点  Windows 兼容的 FAT 文件系统 不依赖于平台,易于移植 代码和工作区占用空间非常小 多种配置选项:多卷(物理驱动器和分区)多 ANSI/OEM 代码页,包括 DBCS在 ANSI/OEM 或 Unicode 中长文件名的支持RTOS 的支持多扇区大小的支持只读,最少 API,I/O 缓冲区等等应用程序接口 FatFs 模块为应用程序提供了下列函数,这些函数描述了 FatFs 能对 FAT 卷执行哪些操作f_mount 在 FatFs 模块上注册 /注销一个工作区( 文件系统对象)FRESULT f_mount (BYTE Drive, /* 逻辑驱动器号 */FATFS* FileSystemObject /* 工作区指针 */);参数Drive 注册/注销工作区的逻辑驱动器号(0-9)FileSystemObject 工作区( 文件系统对象) 指针。

      返回值FR_OK (0)函数成功FR_INVALID_DRIVE 驱动器号无效描述4f_mount 函数在 FatFs 模块上注册/注销一个工作区 在使用任何其他文件函数之前,必须使用该函数为每个卷注册一个工作区要注销一个工作区,只要指定 FileSystemObject 为 NULL 即可,然后该工作区可以被丢弃该函数只初始化给定的工作区,以及将该工作区的地址注册到内部表中,不访问磁盘 I/O 层卷装入过程是在 f_mount 函数后或存储介质改变后的第一次文件访问时完成的f_open 创建/打开一个用于访问文件的文件对象FRESULT f_open (FIL* FileObject, /* 空白文件对象结构指针 */const XCHAR* FileName, /* 文件名指针 */BYTE ModeFlags /* 模式标志 */);参数FileObject 将被创建的文件对象结构的指针FileNameNULL 结尾的字符串指针,该字符串指定了将被创建或打开的文件名ModeFlags 指定文件的访问类型和打开方法它是由下列标志的一个组合指定的。

      模式 描述FA_READ 指定读访问对象可以从文件中读取数据与 FA_WRITE 结合可以进行读写访问FA_WRITE 指定写访问对象可以向文件中写入数据与 FA_READ 结合可以进行读写访问FA_OPEN_EXISTING 打开文件如果文件不存在,则打开失败默认)FA_OPEN_ALWAYS 如果文件存在,则打开;否则,创建一个新文件FA_CREATE_NEW 创建一个新文件如果文件已存在,则创建失败FA_CREATE_ALWAYS 创建一个新文件如果文件已存在,则它将被截断并覆盖注意:当 _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 由于下列原因,所需的访问被拒绝: 以写模式打开一个只读文件 由于存在一个同名的只读文件或目录,而导致文件无法被创建。

       由于目录表或磁盘已满,而导致文件无法被创建FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作FR_WRITE_PROTECTED 在存储介质被写保护的情况下,以写模式打开或创建文件对象FR_DISK_ERR 由于底层磁盘 I/O 接口函数中的一个错误,而导致该函数失败FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败FR_NOT_ENABLED 逻辑驱动器没有工作区FR_NO_FILESYSTEM 磁盘上没有有效地 FAT 卷5描述如果函数成功,则创建一个文件对象该文件对象被后续的读/写函数用来访问文件如果想要关闭一个打开的文件对象,则使用 f_close 函数如果不关闭修改后的文件,那么文件可能会崩溃在使用任何文件函数之前,必须使用 f_mount 函数为驱动器注册一个工作区只有这样,其他文件函数才能正常工作例子(文件拷贝)void main (void){FATFS fs[2]; /* 逻辑驱动器的工作区(文件系统对象) */FIL fsrc, fdst; /* 文件对象 */BYTE buffer[4096]; /* 文件拷贝缓冲区 */FRESULT res; 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.