OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4288|回复: 2

FATFS例程里f_mount(fs[0],"0:",1) 挂载SD函数求解

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-3-13
在线时间
6 小时
发表于 2017-3-15 18:56:50 | 显示全部楼层 |阅读模式
1金钱
main中这么两句话:
        f_mount(fs[0],"0:",1);                                         //挂载SD卡
        res=f_mount(fs[1],"1:",1);                                 //挂载FLASH

FATFS例程里main函数里为啥这两个函数是挂载SD卡和FLASH,如何区分是SD和FLASH?怎么看出来的?goto进去咋啥也看不出呢,求助各位大侠
这是设置注册区(挂载)的子函数源码
FRESULT f_mount (
        FATFS* fs,                        /* Pointer to the file system object (NULL:unmount)*/
        const TCHAR* path,        /* Logical drive number to be mounted/unmounted */
        BYTE opt                        /* 0o not mount (delayed mount), 1:Mount immediately */
)
{
        FATFS *cfs;
        int vol;
        FRESULT res;
        const TCHAR *rp = path;


        vol = get_ldnumber(&rp);
        if (vol < 0) return FR_INVALID_DRIVE;
        cfs = FatFs[vol];                                        /* Pointer to fs object */

        if (cfs) {
#if _FS_LOCK
                clear_lock(cfs);
#endif
#if _FS_REENTRANT                                                /* Discard sync object of the current volume */
                if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR;
#endif
                cfs->fs_type = 0;                                /* Clear old fs object */
        }

        if (fs) {
                fs->fs_type = 0;                                /* Clear new fs object */
#if _FS_REENTRANT                                                /* Create sync object for the new volume */
                if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR;
#endif
        }
        FatFs[vol] = fs;                                        /* Register new fs object */

        if (!fs || opt != 1) return FR_OK;        /* Do not mount now, it will be mounted later */

        res = find_volume(&fs, &path, 0);        /* Force mounted the volume */
        LEAVE_FF(fs, res);

}

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-15 18:56:51 | 显示全部楼层
回复

使用道具 举报

8

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2016-11-21
在线时间
411 小时
发表于 2017-3-16 09:07:18 | 显示全部楼层
res = find_volume(&fs, &path, 0);  跳这个函数里面,这里面又调用了disk_initialize 通过传参不同 调用不同的初始化函数
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 13:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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