FATFS快速读写(f_lseek)

上面是官方给出的资料。

需要注意的几点:

1.

首先是这两个宏定义必须先置位

2.设置快速读写,不能再扩展文件大小

3.具体设置

当file对象中的成员cltbl不是NULL时,可以启用快速查找函数。在使用快速查找函数之前,必须在DWORD数组中创建CLMT。要创建CLMT,将DWORD数组的地址设置为open file对象中的成员cltbl,将数组的大小设置为第一项,并使用ofs = CREATE_LINKMAP调用f_lseek函数。在创建了函数和CLMT之后,在接下来的f_read、f_write、f_lseek函数中没有FAT access。使用或需要的项的数量将返回到数组的第一项。要使用的项的数量是(文件片段的数量+ 1)* 2。例如,当文件在5中分割时,将使用数组中的12个条目。如果函数以FR_NOT_ENOUGH_CORE失败,那么给定的数组大小对该文件来说是不够的。

4.具体使用

/* Using fast seek function */

    DWORD clmt[SZ_TBL];                    /* Cluster link map table buffer */

    res = f_open(fp, fname, FA_READ | FA_WRITE);   /* Open a file */

    res = f_lseek(fp, ofs1);               /* This is normal seek (cltbl is nulled on file open) */

    fp->cltbl = clmt;                      /* Enable fast seek function (cltbl != NULL) */
    clmt[0] = SZ_TBL;                      /* Set table size */
    res = f_lseek(fp, CREATE_LINKMAP);     /* Create CLMT */
    ...

    res = f_lseek(fp, ofs2);               /* This is fast seek */

猜你喜欢

转载自blog.csdn.net/Jun626/article/details/81870989