FATFS文件系统读取u盘内的OK.BIN文件,打开文件都正常,在while循环里面对打开的OK.BIN文件进行多次读操作,每次读取4096个数据。第一次读取都正常,但是第二次读取就出错,返回的错误代码为9。请问这是什么情况呢?请大家帮忙分析一下,看看哪儿出问题了。以下是man.c里面的程序。
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usbh_usr.h"
#include "timer.h"
#include "malloc.h"
#include "exfuns.h"
#include "w25qxx.h"
#include "ff.h"
#include "usbh_msc_core.h"
#include "fattester.h"
#define WRIT_ADD 0xE0000
USBH_HOST USB_Host;
USB_OTG_CORE_HANDLE USB_OTG_Core;
extern USBH_Class_cb_TypeDef USBH_MSC_cb;
extern UINT br,bw;
extern FIL *file; //Îļt1
//enum NETstates netst=0;
u8 arpflag=3;
struct tcp_pcb *tcppcb_=NULL;
const char neam[]="2:/OK.BIN";
u8 USH_User_App(void)
{
u32 total,free,bread;
u32 offx=0,file_byte=0;
u8 res=0,t=0xff;
u16 j;
FIL *fftemp;
u8 *far_buf,*red_buf;
float prog;
res=exf_getfree("2:",&total,&free);
printf("res=%u
",res);
if(res==0)
{
printf("总容量%u KB
",total);
printf("剩余容量%u KB
",free);
}
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //·ÖÅäÄú′æ
far_buf=(u8*)mymalloc(SRAMIN,4096); //·ÖÅäÄú′æ
if(fftemp==NULL||far_buf==NULL)
{
myfree(SRAMIN,far_buf);
myfree(SRAMIN,fftemp);
printf("内存申请失败
");
return 5; //Äú′æéêÇë꧰ü
} printf("内存申请 OK
");
res=f_open(fftemp,"2:/OK.BIN",FA_READ); //(const TCHAR*)pname1
printf("文件打开:%u
",res); //if(res)rval|=1<<4;//′ò¿aÎļt꧰ü
//file_byte = f_size(&fftemp);
file_byte = fftemp->fsize;
printf("文件大小为:%uB
",file_byte);
//sprintf((char *)fatbuf,"%s",neam);
while(res==0)//ËàÑ-»·Ö′DD
{
res=f_read(fftemp,far_buf,4096,(UINT *)&bread); //¶áè¡êy¾Y
printf("当前指针%u
",(u8*)br);
if(res!=FR_OK){printf("读取数据失败:%u
",res);break;} //Ö′DD′íÎó
// W25QXX_Write(far_buf,offx+WRIT_ADD,4096); //′ó0¿aê¼D′èë4096¸öêy¾Y
offx+=bread;
prog=(float)offx/file_byte;
prog*=100;
if(t!=prog)
{
printf("
当前进度为:%u%%
",(u8)prog);
t=prog;
if(t>100)t=100;
}
for(j=0;j<bread;j++)printf("%x",*(far_buf+j));printf("
");
if(bread!=4096){printf("读取数据完成
");break;} //¶áíêáË.
}
f_close(fftemp);
myfree(SRAMIN,fftemp);
myfree(SRAMIN,far_buf);
while(HCD_IsDeviceConnected(&USB_OTG_Core))//é豸ᬽó3é1|
{
printf("设备连接成功!
");
delay_ms(1000);
}
return res;
}
int main(void)
{
u8 res=0;
u16 w25qid=0;
delay_init();
NVIC_Configuration();
uart4_init(19200);
W25QXX_Init(); //3õê¼»ˉW25Q128
my_mem_init(SRAMIN); //3õê¼»ˉÄú2¿Äú′æ3Ø
exfuns_init(); //ÎafatfsÏà1رäá¿éêÇëÄú′æ
res=f_mount(fs[1],"1:",1); //1òÔØFLASH.
f_mount(fs[2],"2:",1); //1òÔØUÅì
printf("res=%u
",res);
USBH_Init(&USB_OTG_Core,USB_OTG_FS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_Callbacks);
my_mem_init(SRAMIN);
w25qid=W25QXX_ReadID();
printf("w25qid=%u
",w25qid);
while(1)
{
USBH_Process(&USB_OTG_Core, &USB_Host);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
提供中文技术支持
一周热门 更多>