求助各位一个问题,我用F429板子搭建文件系统后做简易的数据库,分两个模块,在第一个模块将结构体通过f_write()写入FLASH中的文件系统(以txt文档形式存储),然后关闭文件取消挂载完成数据的保存;然后退出主菜单进入第二个模块数据库的读取,先挂载文件系统,然后打开刚才保存的txt文档读出里面的内容。在这里就出现问题了,屏幕显示的内容提示好像在读模块的挂载 res=f_mount(fs[1],"1:",1);这一步一后的程序都没执行;最后我关机再开机直接去读刚才存入的数据,此时显示读取是成功的。我又推出读模块再重新进入,再读取一次发现又停在那里不动了,然后关机再开机又能读去成功了。这个问题很让我头疼找不出也原因,还请给位指点!
exfuns_init();
res=f_mount(fs[1],"1:",1);
if(res==0X0D)//
{
res=f_mkfs("1:",1,4096);
if(res==0)
{
f_setlabel((constTCHAR*)"1
ATABASE");
show_str("Flash Disk Format Finish",70,5,2,0);//
}else show_str("Flash Disk Format Error ",70,5,2,0); //¸
res=f_mount(NULL,"1:",1);
res=f_mount(fs[1],"1:",1);
delay_ms(100);
}
while(1)
{
k=0;
disp_time();
ChargeVolt();
power_off();
key=key_in();
switch(key)
{
case 1: //
{
res=f_open (&fil,_name, FA_CREATE_ALWAYS|FA_WRITE);
if(res==FR_OK)
{
res_w=f_write (&fil, p, sizeof(zystest), &bww);//
if (res_w==FR_OK)
{
show_str("f_write succeed",0,4,2,0);
sprintf((char*)tbuf,"%s",p->jobname);//
show_str(tbuf,0,5,2,1);
}
else
show_str("f_write FAULT",0,4,2,0);
f_close(&fil);
f_mount(NULL,"1:",1);
}
else
show_str("write f_open FAULT",70,3,2,0);
}
break;
case 10:Clear_Screen(0x00);cd_mode();
break;
}
}
}
这是将数据从结构体保存到文件系统中的代码。
exfuns_init();
res=f_mount(fs[1],"1:",1);
if(res==0X0D)//
{
res=f_mkfs("1:",1,4096);
if(res==0)
{
f_setlabel((constTCHAR*)"1
ATABASE");
show_str("Flash Disk Format Finish",70,5,2,0);//
}else show_str("Flash Disk Format Error ",70,5,2,0); //¸
res=f_mount(NULL,"1:",1);
res=f_mount(fs[1],"1:",1);
delay_ms(100);
}
while(1)
{
k=0;
disp_time();
ChargeVolt();
power_off();
key=key_in();
switch(key)
{
case 4: //
{
res=f_open (&fil,_name, FA_OPEN_EXISTING|FA_READ);
if(res==FR_OK)
{
f_read (&fil, p1, sizeof(zystest1), &bww);
if(res_r==FR_OK)
{
show_str("f_read succeed",100,4,2,0);
sprintf((char*)tbuf,"%s",p1->jobname);
show_str(tbuf,0,6,2,1);
sprintf((char*)tbuf,"%s",p1->bname);
show_str(tbuf,100,6,2,1);
sprintf((char*)tbuf,"x=%.3f",p1->xyb3[0]);
show_str(tbuf,0,7,2,1);
sprintf((char*)tbuf,"y=%.3f",p1->xyb3[1]);
show_str(tbuf,60,7,2,1);
sprintf((char*)tbuf,"h=%.3f",p1->xyb3[2]);
show_str(tbuf,120,7,2,1);
}
else
show_str("f_read FAULT",100,4,2,0);
f_close(&fil);
f_mount(NULL,"1:",1);
}
else
show_str("read f_open FAULT",70,3,2,0);
}
break;
case 10:Clear_Screen(0x00);data_k();
break;
}
}
这是读取部分的代码
一周热门 更多>