fatfs f_mount 和f_open要一在同一个函数内

2019-07-21 07:14发布

发现很奇怪问题啊,我写了一个挂载函数 file_init()里面用了f_mount, 另一个函数是read_file(); 在read_file 里面调用file_init 或是在 写read_file函数前面调用 file_init 都fopen不成功;

只能在read_file 里面写f_mount 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
正点原子
1楼-- · 2019-07-21 07:20
没试过.
我的都是在系统刚启动的时候fmout一下,之后就不管了,直接操作均无问题.
mygod
2楼-- · 2019-07-21 11:58
最后还是把f_mount单独写了,没写进函数里面
业未央
3楼-- · 2019-07-21 14:59
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-21 15:39
回复【4楼】业未央:
---------------------------------
你得有底层接口才能用啊,你有多个存储设备,再分别做底层接口实现,这样才能用多个驱动器的.
否则默认用0,就可以了.
业未央
5楼-- · 2019-07-21 21:10
回复【5楼】正点原子:
---------------------------------
 0.09a版的fatfs的ff.c中是这样写的:
     
FRESULT f_mount (
BYTE vol, / / 逻辑驱动号
FATFS *fs / / 指向文件系统的指针
)
{
FATFS *rfs;
if (vol >= _VOLUMES)          / /检查驱动号的有效性
return FR_INVALID_DRIVE;
                   .
                   .
                   .
 }
 在ffcon.h 中这样定义 _VOLUMES:
           #define  _VOLUMES 1    
  当驱动号大于等于1时就会返回 “无效的驱动号”这样的错误,
  刚开始我没检测这个函数的返回值,将驱动号写成了大于1的数字但是创建文件、读写都成功了。
  按照官方的程序中检测驱动号的方式是不是说所有的存储设备共用一个驱动号0就可以 ?
正点原子
6楼-- · 2019-07-22 02:45
这个_VOLUMES,必须定义大于等于1,表示磁盘驱动器的个数.
我们战舰板的FATFS实验,_VOLUMES就是2,同时支持SD卡和SPI FLASH.
你可以参考下我们的代码.

一周热门 更多>