原创 FatFS源代码阅读分析(五)

2009-11-19 18:46 5529 7 7 分类: MCU/ 嵌入式

接着上次内容:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


DWORD clust2sect (  /* !=0: Sector number, 0: Failed - invalid cluster# */


       FATFS *fs,           /* File system object */


       DWORD clst              /* Cluster# to be converted */


) //这个函数是将簇号转变为对应的扇区号。


clst * fs->csize + fs->database; //这个是算法


 


FRESULT dir_seek (


       DIR *dj,        /* Pointer to directory object */


       WORD idx           /* Directory index number */


)//这个函数的最终目的是根据索引号找到目录项所在簇、所在扇区、并是目录对象的对象指针指向文件系统对象窗口扇区的对应位置。


 


FRESULT dir_next (   /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not streach */


       DIR *dj,        /* Pointer to directory object */


       BOOL streach      /* FALSE: Do not streach table, TRUE: Streach table if needed /


) //移动当前目录项,根据索引,源代码简单看了一下,作用还不是很清晰,先放过。


 


接下来有5个函数与长文件名有关,这里先跳过。


 


FRESULT dir_find (


       DIR *dj                /* Pointer to the directory object linked to the file name */


)//


 


FRESULT dir_read (


       DIR *dj                /* Pointer to the directory object that pointing the entry to be read */


)


 


FRESULT dir_register (      /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */


       DIR *dj                       /* Target directory with object name to be created */


)


 


FRESULT dir_remove (     /* FR_OK: Successful, FR_DISK_ERR: A disk error */


       DIR *dj                       /* Directory object pointing the entry to be removed */


)


//以上这些函数都是对目录项的操作函数。


 


FRESULT create_name (


       DIR *dj,               /* Pointer to the directory object */


       const XCHAR **path  /* Pointer to pointer to the segment in the path string */)


//这个函数太长了,具体用到的时候再说吧。


 


void get_fileinfo (         /* No return code */


       DIR *dj,               /* Pointer to the directory object */


       FILINFO *fno          /* Pointer to store the file information */)


该函数用于获取文件状态信息。主要是从文件的目录项中获取信息。


 


FRESULT follow_path (     /* FR_OK(0): successful, !=0: error code */


       DIR *dj,               /* Directory object to return last directory and found object */


       const XCHAR *path   /* Full-path string to find a file or directory */


)


该函数给定一个全路径,得到相应的目录对象。


 


BYTE check_fs (  /* 0:The FAT boot record, 1:Valid boot record but not an FAT, 2:Not a boot record, 3:Error */


       FATFS *fs,    /* File system object */


       DWORD sect      /* Sector# (lba) to check if it is an FAT boot record or not */)


该函数用于读取BOOT扇区,检查是否FAT文件系统。


 


FRESULT auto_mount (     /* FR_OK(0): successful, !=0: any error occured */


       const XCHAR **path,       /* Pointer to pointer to the path name (drive number) */


       FATFS **rfs,              /* Pointer to pointer to the found file system object */


       BYTE chk_wp                   /* !=0: Check media write protection for write access */)


这个函数的功能不太明白。


 


FRESULT validate (    /* FR_OK(0): The object is valid, !=0: Invalid */


       FATFS *fs,           /* Pointer to the file system object */


       WORD id                   /* Member id of the target object to be checked */


)//检查是否合法的文件系统。


 


FRESULT f_mount (


       BYTE vol,            /* Logical drive number to be mounted/unmounted */


       FATFS *fs            /* Pointer to new file system object (NULL for unmount)*/)


这是一个很重要的函数,装载文件系统。也是从这个函数开始,对外输出供用户调用。


if (vol >= _DRIVES)现在只支持卷号0.


FatFs[vol] = fs;将参数文件系统对象指针赋给全局文件对象指针。


 


后面的函数主要是对文件和目录进行操作,这里就不一一例举了。


下面开始文件系统的执行流程分析。 


 


 

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条