初级会员

- 积分
- 146
- 金钱
- 146
- 注册时间
- 2012-11-13
- 在线时间
- 12 小时
|
原子大哥,下面两个地方(红色标注)的程序没有看明白,请原子大哥帮忙指导下,怎么个原理,想了半天,没有想明白,先谢谢原子大哥了!
FATFS 实验中:
//文件类型列表
const u8 *FILE_TYPE_TBL[6][13]=
{
{"BIN"}, //BIN文件
{"LRC"}, //LRC文件
{"NES"}, //NES文件
{"TXT","C","H"}, //文本文件
{"MP1","MP2","MP3","MP4","M4A","3GP","3G2","OGG","ACC","WMA","WAV","MID","FLAC"},//音乐文件
{"BMP","JPG","JPEG","GIF"},//图片文件
};
//报告文件的类型
//fname:文件名
//返回值:0XFF,表示无法识别的文件类型编号.
// 其他,高四位表示所属大类,低四位表示所属小类.
u8 f_typetell(u8 *fname)
{
u8 tbuf[5];
u8 *attr='\0';//后缀名
u8 i=0,j;
while(i<250)
{
i++;
if(*fname=='\0')break;//偏移到了最后了.
fname++;
}
if(i==250)return 0XFF;//错误的字符串.
for(i=0;i<5;i++)//得到后缀名
{
fname--;
if(*fname=='.')
{
fname++;
attr=fname;
break;
}
}
strcpy((char *)tbuf,(const char*)attr);//copy
for(i=0;i<4;i++)tbuf=char_upper(tbuf);//全部变为大写
for(i=0;i<6;i++)
{
for(j=0;j<13;j++)
{
if(*FILE_TYPE_TBL[j]==0)break;//此组已经没有可对比的成员了.
if(strcmp((const char *)FILE_TYPE_TBL[j],(const char *)tbuf)==0)//找到了
{
1) return (i<<4)|j; 这个怎么理解?和上面的标注“// 其他,高四位表示所属大类,低四位表示所属小类.”是怎么个方式,我是完全没有看明白,希望原子大哥指导的详细些。
}
}
}
return 0XFF;//没找到
}
图片显示实验中:
/得到path路径下,目标文件的总个数
//path:路径
//返回值:总有效文件数
u16 pic_get_tnum(u8 *path)
{
u8 res;
u16 rval=0;
DIR tdir; //临时目录
FILINFO tfileinfo; //临时文件信息
u8 *fn;
res=f_opendir(&tdir,(const TCHAR*)path); //打开目录
tfileinfo.lfsize=_MAX_LFN*2+1; //长文件名最大长度
tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize); //为长文件缓存区分配内存
if(res==FR_OK&&tfileinfo.lfname!=NULL)
{
while(1)//查询总的有效文件数
{
res=f_readdir(&tdir,&tfileinfo); //读取目录下的一个文件
if(res!=FR_OK||tfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);
res=f_typetell(fn);
2) if((res&0XF0)==0X50)//取高四位,看看是不是图片文件 这个地方也没有看明白,是否和上面 1) 处没有看明白有关系,希望原子大哥帮忙指导下。
{
rval++;//有效文件数增加1
}
}
}
return rval;
}
|
|