Fatfs f_close函数为啥老是返回FR_DISK_ERR

2019-08-14 02:50发布

小弟写了个简单的函数,函数首先创建一个文件夹Photo,然后在文件夹里面创建一个文件。
但是每次f_open可以成功,但是f_close总是返回0x01,失败。

如果我把f_open,f_close放到一个函数里面,然后让main函数调用,这样就没有问题

麻烦各位大拿帮我看一下是为什么啊?


void camera_new_pathname(u8 *pname)
{   u8 res;   u16 index=0; while(index<0XFFFF) { sprintf((char*)pname,"0HOTO/PIC%05d.bmp",index); res=f_open(ftemp,(const TCHAR*)pname,FA_READ);//尝试打开这个文件 if(res==FR_NO_FILE)break; //该文件名不存在=正是我们需要的. index++; } }
int main(void)
{      
    FIL* f_bmp;
    u8 *pname;
    f_bmp=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域 
    mem_init(SRAMIN);     exfuns_init();     f_mount(0,fs[0]);
  f_mount(1,fs[1]);     res=f_mkdir("0:/PHOTO"); //创建PHOTO文件夹


    pname=mymalloc(SRAMIN,30);
//为带路径的文件名分配30个字节的内存     camera_new_pathname(pname);
    res=f_open(f_bmp,pname,FA_WRITE|FA_CREATE_NEW);        if(res != 0)      {    printf(" 打开 %s 文件失败! ", "0HOTO/PIC0001.txt");    sd_ok = 0;      }      printf(" 打开文件完成..... ");

     res = f_close(f_bmp);      if(res != 0)      {    printf(" 关闭 %s 文件失败! ", "0HOTO/PIC0001.txt");    sd_ok = 0;      }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
郭震2009
1楼-- · 2019-08-14 04:23
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-08-14 04:46
你上面的代码是正常 的?
披头四
3楼-- · 2019-08-14 10:45
我上面贴出来的是有问题的,f_close的时候返回0x01
后来我改成如下这样就可以成功创建文件了

u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode) { FIL* f_bmp; u8 res; UINT bw; u8 *databuf = "12345";
        f_bmp=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); if(mode==1)res=f_open(f_bmp,(const TCHAR*)filename,FA_READ|FA_WRITE);   if(mode==0||res==0x04)res=f_open(f_bmp,(const TCHAR*)filename,FA_WRITE|FA_CREATE_NEW);     
res=f_write(f_bmp,databuf,6,&bw); res = f_close(f_bmp); return res; }
int main(void)
{
   ...
   ...
    pname=mymalloc(SRAMIN,30);     camera_new_pathname(pname);     
    if(bmp_encode(pname,0,0,240,320,0))     {         printf(" 数据写入有误!..... ");     }
}
正点原子
4楼-- · 2019-08-14 14:44
是不是没加f_write(f_bmp,databuf,6,&bw);的缘故?
这个我倒还真没测试,仅创建文件,不执行f_write是否出问题.
披头四
5楼-- · 2019-08-14 18:49
我也试过的,只是创建文件的话,也没有问题的。
只要把f_open和f_close放在函数里面就OK
langwanglx
6楼-- · 2019-08-14 21:07
 精彩回答 2  元偷偷看……

一周热门 更多>