GD32F3开发进阶教程 课件 ch08FatFs与读写SD卡实验_第1页
GD32F3开发进阶教程 课件 ch08FatFs与读写SD卡实验_第2页
GD32F3开发进阶教程 课件 ch08FatFs与读写SD卡实验_第3页
GD32F3开发进阶教程 课件 ch08FatFs与读写SD卡实验_第4页
GD32F3开发进阶教程 课件 ch08FatFs与读写SD卡实验_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FatFs与读写SD卡实验“第八章《GD32F3开发进阶教程——基于GD32F303ZET6》01实验内容本章的主要内容是了解文件系统的概念和其内部的空间分布,掌握文件系统移植的步骤,学习与文件系统操作有关的一系列函数,最后基于GD32F3苹果派开发板设计一个FatFs与读写SD卡实验,实现向SD卡移植文件系统,并通过各种文件操作函数将电子书文件的内容显示在开发板的LCD屏上,并通过独立按键创建、保存和删除存放阅读进度的文件。实验内容02实验原理0102文件系统:文件系统可以理解为一份用于管理数据的代码,其原理是在写入数据时,求解数据的写入地址和格式,并将这些信息随着数据写入到相应的地址中,其最大的特点是可以对数据进行管理。FatFs文件系统:FatFs文件系统是一种面向小型嵌入式系统的通用FAT文件系统。实验原理实验原理FatFs文件系统的关系网络如图8-1所示。实验原理FatFs组件包含fcdiskio.c等文件,各个文件的描述如表8-1所示。3.文件系统空间分布文件系统是以“簇”为最小单位进行读写的,每个文件至少占用一个簇的空间。簇的大小在格式化时被确定,簇越大,读写速度越快,但对于小文件来说存在浪费空间的问题。FatFs文件系统通常使用的簇的大小为4KB。实验原理实验原理文件系统移植完成后,存储介质中的空间分布情况如图8-2所示。实验原理文件分配表的内容如图8-3所示。实验原理目录的内容及空间分布如图8-4所示。010203添加FatFS文件夹至文件路径。修改ffconf.h文件的相关宏定义。完善diskio.c文件中的底层设备驱动函数。实验原理4.FatFs文件系统移植步骤函数f_mount为存储介质挂载一个文件系统。函数f_close将打开的文件关闭。函数f_open打开或创建一个文件。函数f_read从文件中读取相应长度的数据。实验原理f_write写入相应长度的数据到文件。f_lseek移动打开文件对象的读/写指针。f_size获取文件的大小。f_stat检查目录的文件或子目录是否存在。实验原理03实验代码解析fconf.h文件如表8-1所示fconf.h文件中包含了对FatFs功能配置的宏定义,由于该文件中部分宏定义与本实验功能不相符,因此需要进行修改,另外,还需要添加diskio.h头文件,如程序清单8-2所示,下面对修改的宏定义逐一进行解释。ffconf.h文件ffconf.h文件010203第3行代码的宏定义_USE_MKFS,当其为1时,使能f_mkfs0函数,使得该函数可被调用。因此将其从0修改为1。第5行代码的宏定义_CODE_PAGE,其作用是设置文件系统的编码文字,936为中文编码,932为日文编码,因此将其从932修改为936。第7行代码的宏定义_VOLUMES,其作用是设置盘符数目,由于本实验将SD卡NANDFlash、USB设置为盘符,因此将其从0修改为3。ffconf.h文件0405第9行代码的宏定义_FS_LOCK,其作用是设置文件打开数目,将其修改为3,可支持同时打开3个文件。第11行代码的宏定义_WORD_ACCESS,当其为1时,使能文件系统对WORD文档的操作。ffconf.h文件diskio.c文件disk_status函数用于获取存储设备的状态,这里直接返回正常状态。如程序清单8-3的第9至10行代码所示,当检测到参数为FS_SD(即SD卡设备)时,返RES_OK表示设备正常。0102ReadBookByte.h文件:在ReadBookByteh文件的“API函数声明”区,声明了4个API函数。ReadBookByte.c文件:在ReadBookByte.c文件的“包含头文件”区,包含了h等头文件,fc文件中包含创建、打开和关闭文件等的相关函数,在ReadBookByte.c文件中需要通过调用这些函数读写文件,因此需要包含fh头文件。ReadBookByte文件对下面按照顺序解释说明ReadData函数中的语句。(1)第10至23行代码:打开固定路径的文件后通过fsek函数设置文件的读取位置并检查是否完成。(2)第26至37行代码:将缓冲区清空后,通过fread函数读取一批数据至缓冲区。(3)第40至54行代码:通过close函数关文后更新读取位置,并检测文件是否读取完毕。ReadBookByte文件对下面按照顺序解释说明ReadBookByte函数中的语句。(1)第7至24行代码:检测缓冲区是否为空以及文件是否读取完毕,若为空且未读取完毕则继续读取,若为空且读取完毕则直接返回0。(2)箱30至45行代码:在缓冲区范围内,检测最近的非可视可视字符位置以获取连续可视字符的数目。(3)第49至50行代码:更新已读取字节及剩余字节的计数。ReadBookByte文件对0102FatFSTest.h文件:在FatFSTesth文件的“API函数声明”区,声明了5个API函数。FatFSTest.c文件:在“内部函数声明”区,声明了3个API函数。FatFSTest文件对下面按照顺序解释说明NewPage函数中的语句。(1)第8至22行代码检测上一个未打印字符并设置显示行列数为0,若未打印字符在显示范围内,则将其显示至LCD相应区域。(2)第28至101行代码:通过while语将整页内容显示于文本显示区域,每次循环完成一个字符的显示或操作,当行数大于每页最大行数,即本页全部内容显示完成时返回。(3)第31至35行代码:获取1字节的数据并检测文本是否已完全显示,若完全显示则设置标志位后返回。FatFSTest文件对(4)第38至79行代码:检测获取到的数据,若为回车换行符,则更新行计数及列计数,若为需要显示的字符,则检测是否存在特殊情况,若当前行不足够显示整个单词则换行,若出现空格并且位置为非新段的行首则不显示,若不存在特殊情况,则通过GUIDrawChar函数显示该字符。(5)第82至97行代码:更新列计数以显示下一字符,若本行完全显示则更新行计数。FatFSTest文件对下面按照顺序解释说明PreviousPage函数中的语句。(1)第6至13行代码:则通过for语将s_arrPrevPosition数组中的元素位置进行偏移并将记录中最前一页赋值为无意义,即赋值为0xFFFFFFFF。其中,数组sarPrevPosition用于存放上一页的位置信息,下标和页码呈正相关,最后一个元素为上一页的位置。(2)第16至27行代码:检测当前页是否有意义,若有意义,将文读写指针设置在当前位置。FatFSTest文件对下面按照顺序解释说明NextPage函数中的语句。(1)第6至9行代码:首先检测文本是否已完全显示,若已完全显示则直接返回。(2)第11至24行代码:检测上一页的位置是否有效,若无效表示此时显示第一页,为了避免特殊情况,将当前字节的位置,即上一页的位置保存两次;若有效则进行数组的偏移及赋值。注意,由于文件指针在使用时会自增,因此此时不需要通过SetPosition函数设置文件指针位置。FatFSTest文件对ProcKeyOne.c文件在ProcKeyDownKeylProcKeyDownKey2及ProcKeyDownKey3函数中分别加入了创建保存阅读进度文件、保存阅读进度及删除阅读进度的函数,如程序清单8-19所示。Main.c文件在Proc2msTask函数中调用FatFS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论