F429板子搭建文件系统后做简易的数据库,数据存入后要关机再开机才能读出来,并且存入的数据不能连续读,只能关机再读才可以

2019-07-20 08:02发布

求助各位一个问题,我用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*)"1ATABASE");       
                         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*)"1ATABASE");       
                         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;
        }
}
这是读取部分的代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。