中级会员
 
- 积分
- 298
- 金钱
- 298
- 注册时间
- 2015-1-30
- 在线时间
- 40 小时
|
1金钱
目标:我把GIF转JGP 然后生成BIN文件放在SD卡里面 然后读取并且显示;
我用的是正点原子的历程;
每个文件夹里面有50个BIN文件 运行47循环卡死 正常读取显示了 50*47个文件。。。
while(1)
{
display("0:");
display("0:/1");
display("0:/2");
display("0:/3");
display("0:/4");
ii++;
LCD_ShowNum(30,230,ii,8,16);
//记录次数
if(ii==10000000)ii=0;
}
void display(u8 *path1)
{
u8 res=0;
u32 i=0;
// u32 ii=0;
u8 *test_buff1;
u16 *test_buff2;
HEADCOLOR *imginfo;
u32 file_byte=0;
u8 rval=0; //返回值
DIR picdir; //图片目录
FILINFO picfileinfo;//文件信息
u8 *fn; //长文件名
u8 *pname; //带路径的文件名
u16 totpicnum; //图片文件总数
u16 curindex; //图片当前索引
u16 temp;
u16 *picindextbl; //图片索引表 ?
while(f_opendir(&picdir,(const TCHAR*)path1))//打开图片文件夹
{
Show_Str(30,170,240,16,"PICTURE文件夹错误!",16,0);
delay_ms(200);
LCD_Fill(30,170,240,186,WHITE);//清除显示
delay_ms(200);
}
totpicnum=pic_get_tnum(path1); //得到总有效文件数
picfileinfo.lfsize=_MAX_LFN*2+1; //长文件名最大长度
picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize); //为长文件缓存区分配内存
pname=mymalloc(SRAMIN,picfileinfo.lfsize); //为带路径的文件名分配内存
picindextbl=mymalloc(SRAMIN,2*totpicnum); //申请2*totpicnum个字节的内存,用于存放图片索引
//记录索引
res=f_opendir(&picdir,(const TCHAR*)path1); //打开目录
if(res==FR_OK)
{
curindex=0;//当前索引为0
while(1)//全部查询一遍
{
temp=picdir.index; //记录当前index
res=f_readdir(&picdir,&picfileinfo); //读取目录下的一个文件
if(res!=FR_OK||picfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
picindextbl[curindex]=temp;//记录索引
curindex++;
}
}
LCD_ShowNum(30,170,totpicnum,5,16);
LCD_ShowNum(30,190,curindex,5,16);
curindex=0; //从0开始显示
rval=f_opendir(&picdir,(const TCHAR*)path1); //打开目录
while(rval==FR_OK)//打开成功
{
dir_sdi(&picdir,picindextbl[curindex]); //改变当前目录索引
LCD_ShowNum(30,170,curindex,5,16);
rval=f_readdir(&picdir,&picfileinfo); //读取目录下的一个文件
if(rval!=FR_OK||picfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
fn=(u8*)(*picfileinfo.lfname?picfileinfo.lfname:picfileinfo.fname);
strcpy((char*)pname,(const TCHAR*)path1); //复制路径(目录)
strcat((char*)pname,"/"); //将/粘贴在后面 否则路径错误
strcat((char*)pname,(const char*)fn); //将文件名接在后面
Show_Str(2,2,240,16,pname,16,1); //显示图片名字
rval=f_open(file,(char*)pname,FA_READ); //只读方式打开文件
file_byte=f_size(file);//获得文件长度
test_buff1=mymalloc(SRAMEX,file_byte);
for(;;)//读取内容
{
f_read (file, test_buff1, file_byte, (UINT*)&br);
if(br==0)break;
}
f_close (file); //打开后一定要关闭
test_buff2=mymalloc(SRAMEX,file_byte);
imginfo=(HEADCOLOR*)test_buff1; //得到文件信息
if(imginfo->w>=lcddev.width||imginfo->h>=lcddev.height)
{
POINT_COLOR=RED;
delay_ms(200);
LCD_ShowString(10,70,200,16,16,"The Picture is too large");
delay_ms(200);
continue;
}else{
for(i=0;i<file_byte/2-4;i++)//两个8BIT组合一个16BIT所以要除以2 8个信息头字节所以除以2后减4
{
test_buff2[i]=image_getcolor(0,(u8*)test_buff1+8);//跳过信息头+8
test_buff1+=2;
}
LCD_Color_Fill(1,1,imginfo->w,imginfo->h,test_buff2);
}
curindex++;
/*if(curindex>=totpicnum)
{curindex=0;//到末尾的时候,自动从头开始
ii++;
LCD_ShowNum(30,230,ii,8,16);
//目录下20个文件实测运行7W次无错误
if(ii==10000000)
{
ii=0;
}
} */
if(curindex>=totpicnum)
{
f_closedir(&picdir);
break;
}
myfree(SRAMEX,test_buff1); //释放内存
myfree(SRAMEX,test_buff2); //释放内存
}
运行到第47次卡死在
while(f_opendir(&picdir,(const TCHAR*)path1))//打开图片文件夹
{
Show_Str(30,170,240,16,"PICTURE文件夹错误!",16,0);
delay_ms(200);
LCD_Fill(30,170,240,186,WHITE);//清除显示
delay_ms(200);
}
求大佬帮忙找问题 谢谢
|
|