硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2989|回复: 1
收起左侧

[有问必答] FatFs在移植时候

[复制链接]

8

主题

17

回帖

8

积分

新手上路

。。

积分
8
发表于 2017-6-7 10:45:24 | 显示全部楼层 |阅读模式
那位大神知道在移植 Fatfs时候是如何加载分区表的,

f_mount(0, &g_fs);    /* Mount a logical drive */     //只是将文件系统的结构体指针指向对象

实际将U盘数据挂载到 这个结构体是怎样操作的?

/* File system object structure (FATFS) */

typedef struct {
    BYTE    fs_type;        /* FAT sub-type (0:Not mounted) */
    BYTE    drv;            /* Physical drive number */
    BYTE    csize;            /* Sectors per cluster (1,2,4...128) */
    BYTE    n_fats;            /* Number of FAT copies (1,2) */
    BYTE    wflag;            /* win[] dirty flag (1:must be written back) */
    BYTE    fsi_flag;        /* fsinfo dirty flag (1:must be written back) */
    WORD    id;                /* File system mount ID */
    WORD    n_rootdir;        /* Number of root directory entries (FAT12/16) */
#if _MAX_SS != 512
    WORD    ssize;            /* Bytes per sector (512, 1024, 2048 or 4096) */
#endif
#if _FS_REENTRANT
    _SYNC_t    sobj;            /* Identifier of sync object */
#endif
#if !_FS_READONLY
    DWORD    last_clust;        /* Last allocated cluster */
    DWORD    free_clust;        /* Number of free clusters */
    DWORD    fsi_sector;        /* fsinfo sector (FAT32) */
#endif
#if _FS_RPATH
    DWORD    cdir;            /* Current directory start cluster (0:root) */
#endif
    DWORD    n_fatent;        /* Number of FAT entries (= number of clusters + 2) */
    DWORD    fsize;            /* Sectors per FAT */
    DWORD    volbase;        /* Volume start sector */
    DWORD    fatbase;        /* FAT start sector */
    DWORD    dirbase;        /* Root directory start sector (FAT32:Cluster#) */
    DWORD    database;        /* Data start sector */
    DWORD    winsect;        /* Current sector appearing in the win[] */
    BYTE    win[_MAX_SS];    /* Disk access window for Directory, FAT (and Data on tiny cfg) */
} FATFS;



/* File object structure (FIL) */

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;            /* File status flags */
    BYTE    pad1;
    DWORD    fptr;            /* File read/write pointer (0ed on file open) */
    DWORD    fsize;            /* File size */
    DWORD    sclust;            /* File data start cluster (0:no data cluster, always 0 when fsize is 0) */
    DWORD    clust;            /* Current cluster of fpter */
    DWORD    dsect;            /* Current data sector of fpter */
#if !_FS_READONLY
    DWORD    dir_sect;        /* Sector containing the directory entry */
    BYTE*    dir_ptr;        /* Pointer to the directory entry in the window */
#endif
#if _USE_FASTSEEK
    DWORD*    cltbl;            /* Pointer to the cluster link map table (null on file open) */
#endif
#if _FS_LOCK
    UINT    lockid;            /* File lock ID (index of file semaphore table Files[]) */
#endif
#if !_FS_TINY
    BYTE    buf[_MAX_SS];    /* File data read/write buffer */
#endif
} FIL;
。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2017-6-7 11:23:43 | 显示全部楼层
这要看函数源码,或者你网上搜别人做的源码分析。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 22:42 , Processed in 0.248391 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表