野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14240|回复: 10

FatFs系统是如何和物理层相联系的呢?

[复制链接]
发表于 2015-2-1 14:38:11 | 显示全部楼层 |阅读模式
在学习ISO上的FatFs教程,不是很懂文件系统接口和磁盘物理层是怎么建立联系的?我大概知道是通过diskio文件,但我并没有看到例程中的调用。fire给的例程main函数中有一句“/* function disk_initialize() has been called in f_open */”,but...我没看到f_open有调用disk_Initialization啊,ff.c里只有f_mkfs看起来像是建立物理层连接,但例程中并未调用,求解!!
回复

使用道具 举报

 楼主| 发表于 2015-2-1 15:02:58 | 显示全部楼层
人工置顶...@fire
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-1 20:11:25 | 显示全部楼层
等了一天了...求指导
回复 支持 反对

使用道具 举报

发表于 2015-2-2 09:11:34 | 显示全部楼层
不是有移植教程吗?看移植教程就知道了啊,就是教怎样写接口
回复 支持 反对

使用道具 举报

发表于 2015-2-2 09:12:12 | 显示全部楼层
f_mount的时候调用disk_init
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-2 10:47:42 | 显示全部楼层
flyleaf 发表于 2015-2-2 09:12
f_mount的时候调用disk_init

哪有?下楼是f_mount代码..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-2 10:48:00 | 显示全部楼层
FRESULT f_mount (
        BYTE vol,                /* Logical drive number to be mounted/unmounted */
        FATFS *fs                /* Pointer to new file system object (NULL for unmount)*/
)
{
        FATFS *rfs;


        if (vol >= _VOLUMES)                /* Check if the drive number is valid */
                return FR_INVALID_DRIVE;
        rfs = FatFs[vol];                        /* Get current fs object */

        if (rfs) {
#if _FS_SHARE
                clear_lock(rfs);
#endif
#if _FS_REENTRANT                                /* Discard sync object of the current volume */
                if (!ff_del_syncobj(rfs->sobj)) return FR_INT_ERR;
#endif
                rfs->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(vol, &fs->sobj)) return FR_INT_ERR;
#endif
        }
        FatFs[vol] = fs;                        /* Register new fs object */

        return FR_OK;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-2 11:02:19 | 显示全部楼层
哦哦...会了,f_open里面有用到chk_mounted,谢谢5楼的同学
回复 支持 反对

使用道具 举报

发表于 2015-2-2 11:07:07 | 显示全部楼层
江城子ljy 发表于 2015-2-2 11:02
哦哦...会了,f_open里面有用到chk_mounted,谢谢5楼的同学

fatfs版本不同,有的是在f_mount里实现初始化的
回复 支持 反对

使用道具 举报

发表于 2016-9-20 09:53:34 | 显示全部楼层
江城子ljy 发表于 2015-2-2 11:02
哦哦...会了,f_open里面有用到chk_mounted,谢谢5楼的同学

我在f_mount里没找到这个物理层的联系,在f_open里面也没找到到chk_mounted,能看下你的代码吗,具体的配置在哪个文件里?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 21:57 , Processed in 0.030764 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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