全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FatFsFatFs 源代码中源代码中 C C 语言编程技巧的应用语言编程技巧的应用 1 1 FatFsFatFs 的源代码结构的源代码结构 在在不支持重入和长文件名的情况下 用到的文件有不支持重入和长文件名的情况下 用到的文件有 6 6 个个 integer hinteger h diskio hdiskio h diskio cdiskio c ff hff h ffconf hffconf h ff cff c Integer hInteger h 是是数据类型定义的头文件数据类型定义的头文件 C C 语言标准的数据类型有语言标准的数据类型有 charchar shortshort intint longlong floatfloat doubledouble 等 但是等 但是不同的机器平台上不同的机器平台上 同样同样 的数据类型其支持的数据宽度可能是不同的的数据类型其支持的数据宽度可能是不同的 比如在 比如在 8 8 位机上 位机上 intint 是是 1616 位宽位宽 度 而在度 而在 3232 位机上 位机上 intint 是是 3232 位 位 因此移植性高的源代码 都不应该直接使因此移植性高的源代码 都不应该直接使 用这些数据类型 而是利用用这些数据类型 而是利用 tpyedeftpyedef 将所有的数据类型定义新的名字将所有的数据类型定义新的名字 而在源 而在源 代码中使用这些新名字 代码中使用这些新名字 当代码移植到不同的平台时 根据所要求的数据宽度和实际平台上的规定 当代码移植到不同的平台时 根据所要求的数据宽度和实际平台上的规定 再再 重新配置数据类型重新配置数据类型就可以了 而源代码中的类型名称都不用改 我们在就可以了 而源代码中的类型名称都不用改 我们在 STM32STM32 上用到的库文件 上用到的库文件 ucosucos 的类型定义 的类型定义 FatFsFatFs 的类型定义的类型定义都是这样做的 都是这样做的 diskio hdiskio h 包含了包含了 integer hinteger h 定义了一些简单的配置常量 主要是定义了两个 定义了一些简单的配置常量 主要是定义了两个 数据类型 数据类型 一个是一个是 DSTATUSDSTATUS 用于表示磁盘状态 用于表示磁盘状态 它实质上就是 它实质上就是 charchar 类型 类型 一一 个是枚举类型个是枚举类型 DRESULTDRESULT 用来表示磁盘操作的返回结果 用来表示磁盘操作的返回结果 正确还是错误正确还是错误 接下来主要是接下来主要是一些函数的原型声明一些函数的原型声明 其它源文件只要包含了这个头文件 就可 其它源文件只要包含了这个头文件 就可 以调用这些函数 以调用这些函数 再接下来是再接下来是磁盘状态常数和磁盘操作控制代码的定义磁盘状态常数和磁盘操作控制代码的定义 都是用 都是用 definedefine 来实现的 来实现的 Ffconf hFfconf h 都是一些用于配置的常数定义 都是一些用于配置的常数定义 ff hff h 中根据中根据 ffconf hffconf h 中的配置中的配置定义了一些宏常数和定义了一些宏常数和 带参数的宏带参数的宏 主要是定义主要是定义 了了 FATFSFATFS FILFIL DIRDIR 和和 FILINFOFILINFO 四个文件信息结构体四个文件信息结构体 用来存储文件系统 目 用来存储文件系统 目 录 文件的相关信息 录 文件的相关信息 定义了定义了 FRESULTFRESULT 这个枚举类型结构体 大多数的文件操作函数都返回这个类型这个枚举类型结构体 大多数的文件操作函数都返回这个类型 的值 的值 定义了文件访问模式 目录项属性 目录项各属性字节偏移 定义了文件访问模式 目录项属性 目录项各属性字节偏移 BPBBPB 参数表偏移参数表偏移 等 特别重要的是定义了字 双字访问宏等 等 特别重要的是定义了字 双字访问宏等 define define LD WORD ptr LD WORD ptr WORD WORD BYTE ptr WORD WORD BYTE ptr define define LD DWORD ptr LD DWORD ptr DWORD DWORD BYTE ptr DWORD DWORD BYTE ptr define define ST WORD ptr val ST WORD ptr val WORD BYTE ptr WORD val WORD BYTE ptr WORD val define define ST DWORD ptr val ST DWORD ptr val DWORD BYTE ptr DWORD val DWORD BYTE ptr DWORD val 这几个宏在获取和写入文件信息时特别有用 这几个宏在获取和写入文件信息时特别有用 ff cff c 开头也有一些常数宏和带参数宏的定义 开头也有一些常数宏和带参数宏的定义 大多数的变量都在这个定义和初大多数的变量都在这个定义和初 始化 然后主要是所有文件操作函数的定义 始化 然后主要是所有文件操作函数的定义 2 2 FatFsFatFs 中用到的一些中用到的一些 C C 语言技巧语言技巧 1 1 利用宏 条件编译来实现系统的高配置性 利用宏 条件编译来实现系统的高配置性 在在 FatFsFatFs 中 我们可以看到大量类似下面的代码 中 我们可以看到大量类似下面的代码 if if FS RPATH FS RPATH ifif path path path path ThereThere isis a a headingheading separatorseparator path path dj sclustdj sclust 0 0 StripStrip itit andand startstart fromfrom thethe rootroot dirdir elseelse NoNo headingheading saparatorsaparator dj sclustdj sclust dj fs cdir dj fs cdir StartStart fromfrom thethe currentcurrent dirdir else else ifif path path path path StripStrip headingheading separatorseparator ifif existexist path path dj sclustdj sclust 0 0 StartStart fromfrom thethe rootroot dirdir endif endif 而在而在 ffconf hffconf h 中定义宏中定义宏 FS RPATH FS RPATH 的值 可以实现不同的功能 的值 可以实现不同的功能 2 2 利用结构体存储一个对象的所有信息 利用结构体存储一个对象的所有信息 typedeftypedef structstruct FIL FIL FATFS FATFS fs fs PointerPointer toto thethe ownerowner filefile systemsystem objectobject WORDWORD id id OwnerOwner filefile systemsystem mountmount IDID BYTEBYTE flag flag FileFile statusstatus flagsflags BYTEBYTE csect csect SectorSector addressaddress inin thethe clustercluster DWORDDWORD fptr fptr FileFile R WR W pointerpointer DWORDDWORD fsize fsize FileFile sizesize DWORDDWORD org clust org clust FileFile startstart clustercluster DWORDDWORD curr clust curr clust CurrentCurrent clustercluster DWORDDWORD dsect dsect CurrentCurrent datadata sectorsector if if FS READONLY FS READONLY DWORDDWORD dir sect dir sect SectorSector containingcontaining thethe directorydirectory entryentry BYTE BYTE dir ptr dir ptr PonterPonter toto thethe directorydirectory entryentry inin thethe windowwindow endif endif if if FS TINY FS TINY BYTEBYTE buf MAX SS buf MAX SS FileFile R WR W bufferbuffer endif endif FIL FIL 文件的操作就通过这样的结构体来进行 文件的操作就通过这样的结构体来进行 3 3 统一所用文件操作函数的模式 统一所用文件操作函数的模式 几乎所有的函数都几乎所有的函数都返回返回 FRESULTFRESULT 类型 而类型 而 FRESULTFRESULT 是通过是通过 typedeftypedef 定义的一种定义的一种 枚举变量枚举变量 这样使得函数的风格很清新 易读性强 这样使得函数的风格很清新 易读性强 4 4 带参数宏的巧妙利用 带参数宏的巧妙利用 比如 比如 define define IsUpper c IsUpper c c A LD DWORD dir DIR FileSize 文件大小文件大小 fno fdatefno fdate LD WORD dir DIR WrtDate LD WORD dir DIR WrtDate 这样使得代码的可读性大大增强 这样使得代码的可读性大大增强 5 5 良好的代码书写风格和版本控制 良好的代码书写风格和版本控制 intint f putsf puts constconst char char str str PointerPointer toto th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新科教版高中高二数学下册第一单元排列组合相邻问题卷含答案
- 锅炉设备检修工安全培训效果强化考核试卷含答案
- 厂矿用机车司机安全风险测试考核试卷含答案
- 整模脱模工创新应用知识考核试卷含答案
- 化工萃取工冲突解决能力考核试卷含答案
- 2026年新科教版初中九年级历史上册第三单元工业革命与社会变迁卷含答案
- 塑料着色工操作知识强化考核试卷含答案
- 农业地质调查员岗前实操知识技能考核试卷含答案
- 客车检车员诚信品质考核试卷含答案
- 木焦油工达标评优考核试卷含答案
- 医学免疫学英文版课件:Complement system补体系统
- 高考议论文写作指导课件
- 金蝉使用说明书
- GB/T 2423.16-2022环境试验第2部分:试验方法试验J和导则:长霉
- GB/T 629-1997化学试剂氢氧化钠
- GB/T 27679-2011铜、铅、锌和镍精矿检查取样精密度的实验方法
- 《统计法实施条例》解读
- 汽车电气设备与维修课程标准
- 浣花溪公园植物调查报告课件
- 幼师口语朗读训练课件
- 小学硬笔书法课教案(1-30节)
评论
0/150
提交评论