Fatfs文件系统和移动文件指针一些要点

一、移动文件指针

typedef struct {
FATFS* fs; /* Pointer to the related file system object (**do not change order**) */
WORD id; /* Owner file system mount ID (**do not change order**) */
BYTE flag; /* Status flags */
BYTE err; /* Abort flag (error code) */
DWORD fptr; /* File read/write pointer (Zeroed on file open) */
DWORD fsize; /* File size */
DWORD sclust; /* File start cluster (0:no cluster chain, always 0 when fsize is 0) */
DWORD clust; /* Current cluster of fpter (not valid when fprt is 0) */
DWORD dsect; /* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
DWORD dir_sect; /* Sector number containing the directory entry */
BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
DWORD* cltbl; /* Pointer to the cluster link map table (Nulled on file open) */
#endif
#if _FS_LOCK
UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
#endif
#if !_FS_TINY
BYTE buf[_MAX_SS]; /* File private data read/write window */
#endif

} FIL;


FRESULT f_lseek (
FIL* fp, /* Pointer to the file object */
DWORD ofs /* File pointer from top of file */

)

表示文件指针从文件头开始移动ofs个距离

不通过这个函数,而使用FIL结构体里的fptr成员也可以移动读写指针(f_open打开文件,用fptr移动文件指针,立刻用f_read读时会出现问题,要用f_lseek)

二、关于FR_INVALID_DRIVE(无效的驱动号)问题

ffconfig.h中有一个参数

#define _VOLUMES 2

/* Number of volumes (logical drives) to be used. */

表示驱动号的数量(磁盘驱动器的数量),这参数说明当驱动号大于或等于2时会出现“无效的驱动号”错误。

若想挂载更多设备,将其修改成更大的数即可,

参考帖子:http://www.openedv.com/posts/list/6683.htm

你可能感兴趣的:(FATFS文件系统,STM32)