读取sd卡的jpg文件,然后串口打印,结果数据丢了好多,但是读取文本文件不会丢失,麻烦帮忙看看。
文件是2210字节的jpg,文本文件也是2000多字节。
打印jpg时:使用u2_printf("%c",(char*)jpg_buffer);时,串口打印出2210字节,和源文件自己数一致,读取次数应该没错。
打印jpg时:使用u2_printf("%c",*((char*)jpg_buffer));时,串口打印出2055字节,丢失了许多字节。
打印jpg时:使用u2_printf("%c%c",(char*)jpg_buffer,*((char*)jpg_buffer));时,可以看到,前者个数是对的。十六进制查看,打印出的地址是DO。然后对应的值时有时无。比如D0 FF D0 FE D0 D0 D0 F0 D0 D0 D0 09。。。
[mw_shl_code=c,true] FIL *f_jpg;
u8 *jpg_buffer; //数据缓存区
f_jpg=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
if(f_jpg==NULL){
u2_printf("f_jpg内存申请失败");
return PIC_MEM_ERR;
} //申请内存失败.
jpg_buffer=(u8*)mymalloc(SRAMIN,sizeof(u8));
if(jpg_buffer==NULL)
{
myfree(SRAMIN,f_jpg); //释放f_jpeg申请到的内存
u2_printf("jpg_buffer内存申请失败");
return PIC_MEM_ERR; //申请内存失败.
}
//打开文件 ,共2210字节
res=f_open(f_jpg,(const TCHAR*)pname_main,FA_READ);
while(1)
{
f_read(f_jpg,jpg_buffer,1,(UINT*)&br_main);//开始时读入
//u2_printf("%c",(char*)jpg_buffer);//2210个数据,正确
u2_printf("%c",*((char*)jpg_buffer));//2055字节,正确是2210
if(f_jpg->fsize<=(f_jpg->fptr))break;
}
f_close(f_jpg);
myfree(SRAMIN,f_jpg);
myfree(SRAMIN,jpg_buffer);
[/mw_shl_code]
|