fatfs源代码中c语言编程技巧的应用

fatfs源代码中c语言编程技巧的应用

ID:15388533

大小:50.00 KB

页数:5页

时间:2018-08-03

fatfs源代码中c语言编程技巧的应用_第1页
fatfs源代码中c语言编程技巧的应用_第2页
fatfs源代码中c语言编程技巧的应用_第3页
fatfs源代码中c语言编程技巧的应用_第4页
fatfs源代码中c语言编程技巧的应用_第5页
资源描述:

《fatfs源代码中c语言编程技巧的应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、FatFs源代码中C语言编程技巧的应用一、FatFs源代码中C语言编程技巧的应用1、FatFs的源代码结构在不支持重入和长文件名的情况下,用到的文件有6个:integer.h、diskio.h、diskio.c、ff.h、ffconf.h、ff.c。Integer.h是数据类型定义的头文件,C语言标准的数据类型有char、short、int、long、float、double等,但是不同的机器平台上,同样的数据类型其支持的数据宽度可能是不同的。比如在8位机上,int是16位宽度。而在32位机上,int是32位

2、。因此移植性高的源代码,都不应该直接使用这些数据类型,而是利用tpyedef将所有的数据类型定义新的名字,而在源代码中使用这些新名字。当代码移植到不同的平台时,根据所要求的数据宽度和实际平台上的规定,再重新配置数据类型就可以了,而源代码中的类型名称都不用改。我们在STM32上用到的库文件、ucos的类型定义、FatFs的类型定义都是这样做的。diskio.h包含了integer.h,定义了一些简单的配置常量。主要是定义了两个数据类型:一个是DSTATUS,用于表示磁盘状态,它实质上就是char类型;一个是枚举

3、类型DRESULT,用来表示磁盘操作的返回结果-正确还是错误。接下来主要是一些函数的原型声明。其它源文件只要包含了这个头文件,就可以调用这些函数。再接下来是磁盘状态常数和磁盘操作控制代码的定义,都是用define来实现的。Ffconf.c都是一些用于配置的常数定义。ff.h中根据ffconf.c中的配置定义了一些宏常数和带参数的宏。主要是定义了FATFS、FIL、DIR和FILINFO四个文件信息结构体,用来存储文件系统、目录、文件的相关信息。定义了FRESULT这个枚举类型结构体,大多数的文件操作函数都返回

4、这个类型的值。定义了文件访问模式、目录项属性、目录项各属性字节偏移、BPB参数表偏移等,特别重要的是定义了字、双字访问宏等。#defineLD_WORD(ptr)(WORD)(*(WORD*)(BYTE*)(ptr))#defineLD_DWORD(ptr)(DWORD)(*(DWORD*)(BYTE*)(ptr))#defineST_WORD(ptr,val)*(WORD*)(BYTE*)(ptr)=(WORD)(val)#defineST_DWORD(ptr,val)*(DWORD*)(BYTE*)(pt

5、r)=(DWORD)(val)这几个宏在获取和写入文件信息时特别有用。ff.c开头也有一些常数宏和带参数宏的定义,大多数的变量都在这个定义和初始化。然后主要是所有文件操作函数的定义。2、FatFs中用到的一些C语言技巧(1)利用宏、条件编译来实现系统的高配置性在FatFs中,我们可以看到大量类似下面的代码:#if_FS_RPATHif(*path=='/'

6、

7、*path=='\'){/*Thereisaheadingseparator*/path++;dj->sclust=0;/*Stripitandsta

8、rtfromtherootdir*/}else{/*Noheadingsaparator*/dj->sclust=dj->fs->cdir;/*Startfromthecurrentdir*/}#elseif(*path=='/'

9、

10、*path=='\')/*Stripheadingseparatorifexist*/path++;dj->sclust=0;/*Startfromtherootdir*/#endif而在ffconf.h中定义宏_FS_RPATH的值,可以实现不同的功能。(2)利用结构体存储一

11、个对象的所有信息typedefstruct_FIL_{FATFS*fs;/*Pointertotheownerfilesystemobject*/WORDid;/*OwnerfilesystemmountID*/BYTEflag;/*Filestatusflags*/BYTEcsect;/*Sectoraddressinthecluster*/DWORDfptr;/*FileR/Wpointer*/DWORDfsize;/*Filesize*/DWORDorg_clust;/*Filestartcluster

12、*/DWORDcurr_clust;/*Currentcluster*/DWORDdsect;/*Currentdatasector*/#if!_FS_READONLYDWORDdir_sect;/*Sectorcontainingthedirectoryentry*/BYTE*dir_ptr;/*Pontertothedirectoryentryinthewindow*/#endif#if!_FS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。