OpenEdv-开源电子网

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

有关FATFS 文件打不开

[复制链接]

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
发表于 2014-6-5 21:06:20 | 显示全部楼层 |阅读模式
5金钱
void wav_play_task(void *pdata)
{
FRESULT res;  
DIR tdir;
FILINFO info;
INT8U err;
  char *fn;   /* This function is assuming non-Unicode cfg. */
  FIL *tfile;

u8 *databuf;
u16 br=0;
u16 i=0;
tfile=(FIL *)mymalloc(SRAMIN,sizeof(FIL));
databuf=(u8 *)mymalloc(SRAMIN,512);
#if _USE_LFN
  info.lfsize = _MAX_LFN * 2 + 1;
info.lfname = mymalloc(SRAMIN,info.lfsize);
#endif  
    while(tfile==NULL||info.lfname==NULL||databuf==NULL) 
Show_Str(10,20,200,12,"?????ê???§°?",12,0);

    res = f_opendir(&tdir,"0:/RECORDER"); //?ò??????????
    if(res)Show_Str(10,20,200,12,"???????ò???§°?",12,0);

    while(res == FR_OK) 
{
OSSemPend(flag_play,0,&err);
VS_HD_Reset();   //??????
VS_Soft_Reset();   //?í???? 
VS_Set_Vol(220); //?è??????    
VS_Reset_DecodeTime(); //?????????±?? 
dir_sdi(&tdir,index);
res = f_readdir(&tdir, &info);                   //????????????????????
while(res != FR_OK || info.fname[0] == 0) 
Show_Str(10,20,200,12,"?????÷???§°?",12,0);  
#if _USE_LFN
fn = *info.lfname ? info.lfname : info.fname;
#else   
fn = info.fname;
#endif                                            
LCD_ShowString(10,20,200,12,12,(u8*)fn);   能够正常得到文件的名字  但是下一步打开这个文件就出问题了 

res=f_open(tfile,(const TCHAR*)fn,FA_READ);//?ò??????   res的值为FR_NO_FILE 
while(res)Show_Str(10,20,200,12,"?????ò???§°?",12,0);  能够执行这一句 显示文件打开失败 之后就进入一个stm32的死循环 

// if(res==FR_OK)//?ò??????.
// { 
// VS_SPI_SpeedHigh(); //????   
// while(1)
// {
// res=f_read(tfile,databuf,512,(UINT*)&br);//????512??×???  
// i=0;
// do//?÷??·????·
// {  
// if(VS_Send_MusicData(databuf+i)==0)i+=32;//??VS10XX·???????????
// else recoder_show_time(VS_Get_DecodeTime());//??????·??±??      
// }while(i<512);//???··???512??×??? 
// if(br!=512||res!=0)
// {
// break;//???ê??.  
// } 
// if(OSSemAccept(flag_play))
// {
// break;
// }
// delay_ms(5);
// }
//   }  
    }
 myfree(SRAMIN,info.lfname);
myfree(SRAMIN,tfile);
myfree(SRAMIN,databuf);
}

进入了 这个死循环
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

大家帮忙看看怎么回事  
另外 怎么发帖子能让贴的代码 格式不变  我看以后的人贴的代码 跟编译器上显示的差不多 我贴出来怎么就这样

最佳答案

查看完整内容[请看2#楼]

已经解决  原因是 f_open();中文件名需要时带路径的文件名
我是一只摔不死的蚂蚁!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
 楼主| 发表于 2014-6-5 21:06:21 | 显示全部楼层
已经解决 
原因是 f_open();中文件名需要时带路径的文件名
我是一只摔不死的蚂蚁!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 09:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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