OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8159|回复: 3

继续请求原子显示汉字的问题

[复制链接]

54

主题

248

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2012-3-23
在线时间
0 小时
发表于 2012-8-25 18:01:37 | 显示全部楼层 |阅读模式
就是这个函数








这里面不是排除了长文件名吗?
然后我加入了选择长目录项的功能,但是现在找一个文件都提示文件不存在。代码如下:

FileInfoStruct F_Search(u32 cluster,unsigned char *Name,u32 type) 
DWORD sector;     
DWORD tempclust; 
unsigned char cnt; 
unsigned int offset; 
unsigned int i=0;       
direntry *item = 0; 
winentry *witem=0;      
FileInfoStruct FileInfo;               
tempclust=cluster; 
while(1) 
  sector=fatClustToSect(tempclust); 
  for(cnt=0;cnt<SectorsPerClust;cnt++) 
  { 
     if(SD_ReadSingleBlock(sector+cnt,fat_buffer)) 
     { 
         FileInfo.F_StartCluster=0;//读数错误  
 printf("读数错误\n");
         return FileInfo;    
     } 
     for(offset=0;offset<512;offset+=32) 
     { 
    item=(direntry *)(&fat_buffer[offset]); 
    if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5)) 
    {     
     if(item->deAttributes != AM_LFN) //忽略长文件名         
     {          
      CopyDirentruyItem(&FileInfo,item);//复制目录项, 提取详细信息     
 
      if(FileInfo.F_Type&type)//找到一个合适的类型了 
      {              
       //printf("F_Info->F_Name:%s\n",FileInfo.F_Name); 
       //printf("F_Info->F_Type:%d\n",FileInfo.F_Type); 
       //printf("F_Info->F_Size:%d\n",FileInfo.F_Size);
       //printf("F_Info->F_StartClusterH:%x\n",FileInfo.F_StartCluster>>8);        
   //printf("F_Info->F_StartClusterL:%x\n\n",FileInfo.F_StartCluster&0xff); 
       //找到了文件,返回这个文件的首簇 
       if(mystrcmp(Name,FileInfo.F_Name)) 
       {        
        return FileInfo;  
       } 
          }     
              LongNameFlag=0;//清空长文件名 
         }else
 {
     LongNameFlag=1;   //表示此目录项是长文件名目录项
 witem=(winentry *)(&fat_buffer[offset]);
 if((witem->weCnt&0x1f)<=3) //最大支持39个长文件名字符
 {
     u8 *Buffer;     //存储长文件名目录项中的26 Bytes
 my_stradd(Buffer,(u8 *)(witem->wePart1));
 my_stradd(Buffer,(u8 *)(witem->wePart2));
 my_stradd(Buffer,(u8 *)(witem->wePart3));
 for(i=(witem->weCnt-1)*26;i<(witem->weCnt)*26;i++)
 {
     LongNameBuffer=Buffer;
 }
 printf("长文件名:%s\n",LongNameBuffer);
 }
 }
        } 
     } 
  }         
  tempclust=FAT_NextCluster(tempclust);//查找下一个簇号 
  if(tempclust==0x0fffffff||tempclust==0x0ffffff8)break; 
}         
FileInfo.F_StartCluster=0;//读数错误  
printf("不存在该文件\n");
return FileInfo;             
}


从心所欲
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-25 19:08:51 | 显示全部楼层
我的本来就支持长文件名的!!!
你直接刷我们的代码看看就知道了,不要私自改这个代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

248

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2012-8-25 21:27:06 | 显示全部楼层
那为什么会没有长文件名的处理过程呢??只有短文件名。长文件名的处理函数在什么文件中???
从心所欲
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-25 22:31:46 | 显示全部楼层
有JTAG么?
跟踪一下我原版的代码,最好是图片显示实验的.
记得,把按键屏蔽掉!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 12:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表