FatFs源码阅读笔记
FatFs就不介绍了,这里使用的版本是0.07e。
1. f_mount函数比较简单,使全局FATFS对象指针指向fs,并使fs->fs_type=0。
2. f_open函数
- NAMEBUF(sfn, lfn) 调用NAMEBUF这个宏定义创建保存短文件名的数组,如果使用长文件名则将lfn指向长文件名数组。
- chk_mounted 检查文件系统,读取文件系统参数。
- 在路径中找设备号,默认为0。
- 支持重入添加锁定信号量,初始化磁盘等操作。
- 调用check_fs 在FAT引导扇区查找文件系统类型,fat16和fat32都返回0;如果没有找到返回1则在0号扇区查找分区表,根据分区表中的分区起始扇区地址再重新调用check_fs函数。
- 从FAT引导扇区中读fat表大小扇区数,fat表个数,fat表起始扇区=FAT引导扇区偏移量+保留扇区数,每簇扇区数,根目录最多可容纳的目录项数(fat16通常为512,fat32为0),文件系统扇区总数,最大簇数,根目录簇号,数据区开始扇区,文件系统类型等。
- follow_path 跟据路径找到文件所在目录,将文件父目录扇区读入文件系统缓冲区,读取文件目录项的信息;调用了create_name、dir_find函数。
- 如果文件不存在,并且支持创建新文件,则调用dir_register创建新文件;如果文件存在,将文件父目录的目录项中记录文件起始簇号的字节清0,再调用remove_chain将fat表中该簇对应的项清0;调用move_window确保读入文件父目录扇区到缓冲区。
- 将DIR对象的相关信息写到FIL对象中。
- 参数检查,如果要读的字节数大于文件大小,则将其调整为文件大小。
- 使用for循环读文件,if ((fp->fptr % SS(fp->fs)) == 0)表示读指针位于扇区边界,
if (fp->csect >= fp->fs->csize) { /* 是否位于簇边界 */
/*读入簇号,最开始读入文件起始簇,后面从fat表中读下一簇 */
clst = (fp->fptr == 0) ? fp->org_clust : get_fat(fp->fs, fp->curr_clust);
if (clst <= 1) ABORT(fp->fs, FR_INT_ERR); /* 检查簇地址有效性*/
if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR);
fp->curr_clust = clst; /* 改写当前簇地址*/
fp->csect = 0; /* 改写扇区在 簇中的地址为0*/
}
sect = clust2sect(fp->fs, fp->curr_clust); /*将簇号转换为扇区地址*/
cc = btr / SS(fp->fs); /*需要读的扇区数*/
if (cc) { /*需要读的扇区数大于0*/
if (fp->csect + cc > fp->fs->csize) /*如果需要读的簇大于0*/
cc = fp->fs->csize - fp->csect; /*确保只读到当前簇*/
if (disk_read(fp->fs->drive, rbuff, sect, (BYTE)cc) != RES_OK) /*读取扇区内容到缓冲区*/
ABORT(fp->fs, FR_DISK_ERR); /*失败,返回错误信息*/
/* Replace one of the read sectors with cached data if it contains a dirty sector */
if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc)
mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf, SS(fp->fs)); /*?没有理解*/
- 读指针不在扇区边界
rcnt = SS(fp->fs) - (fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */
if (rcnt > btr) rcnt = btr;
mem_cpy(rbuff, &fp->buf[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */
4. f_write 函数 和读操作很相似
<未完>
个人理解,如有错误请指出。
2023年7月20日 16:31
BOSEM Board 10th Class Exam date Sheet 2024 available at Official Website, Manipur Board as they are Preparing for Their 10th Class Exam 2024, A Careful Analysis of the Latest Syllabus gives them an idea of the Chapters and Topics which need to be Prepared for the Public Examinations,Manipur Board Regulates and Supervises the System of Manipur Board High School BOSEM 10th Class Syllabus 2024 Leaving Certificate Examination, Students This Webpage, we are Providing the Manipur Class syllabus 2024 All English, Hindi, Bengali, Sanskrit, Nepali Medium Subjects can be Downloaded Pdf Format.
2023年7月22日 23:41
Netflix bietet eine Reihe von Filmen, Fernsehsendungen und Originalinhalten für ein angemessenes monatliches Abonnement. Netflix kann auf Smart TV, Streaming-Geräten oder modernen Spielsystemen mit Internetverbindung angezeigt werden. netflix.com/tv8 Bei einigen Geräten müssen Sie das Gerät aktivieren, bevor Sie sich anmelden. Dies ist üblich bei neuen Geräten oder solchen, die gerade Softwareänderungen erhalten haben.
2023年8月22日 19:32
Gujarat Board Primary School Academic Year Close in Every Year Month of April, Gujarat Board Elementary School new Academic Year Open in Every Year Month of Jun, Every Year Gujarat State Wise Class More Than 50 Laks of Students Attended, Every Year Primary School Education Department Government of Gujarat Distribution in Textbook in Gujarati / English / Hindi Medium.The Printed Gujarat Class Gujarat 1st Class Textbook 2024 Textbook 2024 are Distributed Through Cooperative Institutions All over Gujarat. Vendors are Linked to the Distribution of Textbooks with Distributors in each District. Gujarat Board Class Book 2024 are easily Accessible to All Students of This System, This will assist in improving the Quality of Teaching by Understanding the Type of Difficulties Faced by Students.
2024年1月10日 01:10
Board Model Papers 2024 Download with Suggestions for 10th Class Textbooks 2024 Pdf Download and SSLC New Syllabus Sample Question Paper 2024 and different types of model papers boardmodelpaper.com and question papers for following the website and Arts, Science, Commerce Stream Subject Wise Solved Question Bank for Hindi & English Medium Students with Exam Pattern & Blueprint and subject Wise with 11th & 12th Question Bank 2024 for General & Vocational Course Languages & Subjects Important Question for the above link.