小弟写了个简单的函数,函数首先创建一个文件夹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,"0
HOTO/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 文件失败!
", "0
HOTO/PIC0001.txt");
sd_ok = 0;
}
printf("
打开文件完成.....
");
res = f_close(f_bmp);
if(res != 0)
{
printf("
关闭 %s 文件失败!
", "0
HOTO/PIC0001.txt");
sd_ok = 0;
}
}
后来我改成如下这样就可以成功创建文件了
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(" 数据写入有误!..... "); }
}
这个我倒还真没测试,仅创建文件,不执行f_write是否出问题.
只要把f_open和f_close放在函数里面就OK
一周热门 更多>