OpenEdv-开源电子网

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

关于综合实验的Mp3 Task

[复制链接]

8

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2011-5-31
在线时间
2 小时
发表于 2014-5-11 15:07:57 | 显示全部楼层 |阅读模式
5金钱
在移植的时候发现Mp3 Task中
//为长文件名申请缓存区
mp3info.lfsize = _MAX_LFN * 2 + 1;
mp3info.lfname = gui_memin_malloc(mp3info.lfsize);
if(mp3info.lfname==NULL)rval=1;//申请内存失败 
  else gui_memset((u8 *)mp3info.lfname,0,mp3info.lfsize);
if(rval==0)rval=f_opendir(&mp3dir,(const TCHAR*)mp3dev->path); //打开选中的目录
这段函数,
f_opendir(&mp3dir,(const TCHAR*)mp3dev->path); //打开选中的目录
在运行到这句时死机,怀疑是mp3dev->path空指针,我查看代码发现mp3dev->path之前并没有赋值,有可能为空指针。
我想知道是我代码没看全么,为什么原子的好使呢?是什么问题呢?

最佳答案

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

[mw_shl_code=c,true]//MP3播放 u8 mp3_play(void) { u8 i; u8 res; u8 tcnt=0; u8 rval=0;//1,内存错误;2,返回,MP3继续播放;3,返回,停止MP3播放. u16 specbuf[15]; u8 lastvolpos; _progressbar_obj* mp3prgb,*volprgb; _btn_obj* tbtn[5]; if(mp3dev==NULL)//第一次打开,申请必要的内存 { mp3dev=(_m_mp3dev*)gui_memin_malloc(sizeof(_m_mp3dev)); if(mp3dev==NULL)return 1; // ...
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-11 15:07:58 | 显示全部楼层
[mw_shl_code=c,true]//MP3播放 u8 mp3_play(void) { u8 i; u8 res; u8 tcnt=0; u8 rval=0;//1,内存错误;2,返回,MP3继续播放;3,返回,停止MP3播放. u16 specbuf[15]; u8 lastvolpos; _progressbar_obj* mp3prgb,*volprgb; _btn_obj* tbtn[5]; if(mp3dev==NULL)//第一次打开,申请必要的内存 { mp3dev=(_m_mp3dev*)gui_memin_malloc(sizeof(_m_mp3dev)); if(mp3dev==NULL)return 1; //申请内存失败 gui_memset((u8 *)mp3dev,0,sizeof(_m_mp3dev)); //清零 mp3dev->fmp3=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域 if(mp3dev->fmp3==NULL) //内存申请失败. { gui_memin_free(mp3dev); //释放之前申请到的内存 return 1; } lrcdev=lrc_creat(); //创建歌词管理结构体 if(lrcdev) { lrcdev->font=12; lrcdev->bkcolor=MP3_MAIN_BKCOLOR; } gui_memset((u8 *)mp3dev->fmp3,0,sizeof(FIL)); //清零 } if((mp3dev->sta&0x80)==0) //当前没有播放MP3 { VS_HD_Reset(); VS_Soft_Reset(); //复位 mp3_filelist(mp3dev); if((mp3dev->sta&0x80)==0)return 0;//还是没有MP3在播放,则退出程序 }else mp3dev->sta|=1<<6;//模拟一次切歌,让歌曲名字等信息显示出来 ///////////////////////////////////////////////////////////////////////////////// mp3prgb=progressbar_creat(20,120,200,10,0X20); //mp3播放进度条 if(mp3prgb==NULL)rval=1; volprgb=progressbar_creat(120,150+15,100,6,0X20); //声音大小进度条 if(volprgb==NULL)rval=1; volprgb->totallen=150; //更新总长度,音频从100~250.偏移为100. [/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-11 17:57:44 | 显示全部楼层
当然要先申请内存才行了.
我们的代码有申请内存的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2011-5-31
在线时间
2 小时
 楼主| 发表于 2014-5-11 18:58:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
感谢原子回复
void music_task(void *pdata)
{  
  DIR mp3dir; //mp3dirר??   
  FILINFO mp3info;      
  u16 br;
u8 res,rval;   
u8 *databuf;
u8 *patchbuf=0;       
u16 i=0;   
u8 *pname=0;    
  OS_ERR   err;
  //mp3mbox=OSMboxCreate((void*) 0);//???¨????
  OSQCreate(&MusicQ,"MusicQuene",1,&err);
// VS_HD_Reset();
// VS_Soft_Reset();   //?í????VS1053
printf("Music lay Task!\r\n"); 
  while(1)
{
// mp3dev->curindex=(u32)OSMboxPend(mp3mbox,0,&rval)-1;//???ó????,??????1,?ò??·??????±?ò??????1
rval=0;
databuf=(u8*)mymalloc(SRAMIN,4096); //??±?512×????????????ò
if(databuf==NULL)rval=1 ; //?????ê???§°?.
//???¤???????ê????????
  mp3info.lfsize = _MAX_LFN * 2 + 1;
mp3info.lfname = gui_memin_malloc(mp3info.lfsize);
printf("?·??:%d\r\n",(const char*)mp3dev->path);
if(mp3info.lfname==NULL)rval=1;//?ê???????§°? 
    else gui_memset((u8 *)mp3info.lfname,0,mp3info.lfsize);
if(rval==0)rval=f_opendir(&mp3dir,(const TCHAR*)mp3dev->path); //

但是我还是没看明白,从这段代码来看并没有为mp3dev申请内存,而且即便申请了内存,但是内容是空的也是不行的啊。
电子爱好者
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 04:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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