OpenEdv-开源电子网

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

求教 在ucos和ucgui中音乐播放的问题

[复制链接]

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
发表于 2015-5-31 11:00:32 | 显示全部楼层 |阅读模式
5金钱
在ucos和ucgui中加入音乐播放后 音乐播放一段后就从头开始播放 找不到原因
这是代码
#include "musicplay.h"


FIL* fmp3;
u8 MusicPlayBuffer[520];
char  musicbuf[30];
char  musicbuf1[38] = {"0:/MUSIC/"};
_MusicInfo musicinfo=
{
1,
0,
"???????è?ú",
};
TEXT_Handle   hText_MusicPlay;
OS_STK PlaySong_Task_Stk[PLAYSONG_TASK_STK_SIZE];

void PlaySong_TaskInit(void *pdata);
u8 mp3_play_song(u8 *pname);

static const GUI_WIDGET_CREATE_INFO MusicListCreate[] = {
    { FRAMEWIN_CreateIndirect,  "??????±í",          0,                       0,  0,  240,320,FRAMEWIN_CF_MOVEABLE,0},
    { BUTTON_CreateIndirect,    "??·?",              GUI_ID_BUTTON0,          43, 268,55, 25, 0,0},
    { BUTTON_CreateIndirect,    "????",              GUI_ID_BUTTON1,          138,268,55, 25, 0,0},
    { LISTBOX_CreateIndirect,    NULL,               GUI_ID_LISTBOX0,         -3, -3, 237,265,0,0}
};
void MusicListPaintDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

}

void MusicListInitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //
    //FRAMEWIN
    //
    FRAMEWIN_SetFont(hWin,&GUI_FontHZ_MicrosoftFont_13);
//    FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
    FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
    FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
    FRAMEWIN_SetTitleHeight(hWin,20);
    //
    //GUI_ID_BUTTON0
    //
    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_FontHZ_MicrosoftFont_13);
    //
    //GUI_ID_BUTTON1
    //
    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON1),&GUI_FontHZ_MicrosoftFont_13);
    //
    //GUI_ID_LISTBOX0
    //
    LISTBOX_SetFont(WM_GetDialogItem(hWin,GUI_ID_LISTBOX0),&GUI_FontHZ_MicrosoftFont_13);
    LISTBOX_SetAutoScrollV(WM_GetDialogItem(hWin,GUI_ID_LISTBOX0),1);
//    LISTBOX_SetAutoScrollH(WM_GetDialogItem(hWin,GUI_ID_LISTBOX0),1);

}

/********************************************************************************************************** 
** ????????:    ThemecolorsCallback
** ????:        ?÷?????????÷????
** ????:        pMsg
** ????:        ??
** ·?????:      ??
**********************************************************************************************************/
static void MusicListCallback(WM_MESSAGE * pMsg) 
{
    int NCode, Id;
// u8 res;

    WM_HWIN hWin = pMsg->hWin;
LISTBOX_Handle hMusicPlayList;
hMusicPlayList = WM_GetDialogItem(hWin,GUI_ID_LISTBOX0);
    switch (pMsg->MsgId) 
    {
        case WM_PAINT:
            MusicListPaintDialog(pMsg);
            break;
        case WM_INIT_DIALOG:
MenuDisnable++;
            MusicListInitDialog(pMsg);
exfuns_scan("0:/MUSIC");
for(Id=0;Id<filecount;Id++)
{
LISTBOX_AddString(hMusicPlayList, (char*)FileList[Id]);
}
            break;
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) 
            {
                case GUI_KEY_ESCAPE:
                    GUI_EndDialog(hWin, 1);
                    break;
                case GUI_KEY_ENTER:
                    GUI_EndDialog(hWin, 0);
                    break;
            }
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc); 
            NCode = pMsg->Data.v;        
            switch (NCode) 
            {
                case WM_NOTIFICATION_RELEASED:
if(Id==GUI_ID_BUTTON0)
{
musicinfo.PlaySongFlag=0;
// f_close(fmp3);    //??±?????
musicinfo.PlaySongNowNum = LISTBOX_GetSel(hMusicPlayList);//·????????????????ù????????
LISTBOX_GetItemText(hMusicPlayList,musicinfo.PlaySongNowNum,(char *)musicbuf,30);
strcpy(musicinfo.MusicName,musicbuf);
strcat(musicbuf1,musicbuf);
// VS_Reset_DecodeTime();//
// f_open(fmp3, musicbuf1, FA_OPEN_EXISTING | FA_READ);
musicinfo.PlaySongFlag=1;
// mp3_play_song(buf1);
// GUI_EndDialog(hWin, 0);
 // MenuDisnable--;
}
else if(Id==GUI_ID_BUTTON1)
{
GUI_EndDialog(hWin, 1);
MenuDisnable--;
}
break;
default:
   break;
            }
            break;
        default:
            WM_DefaultProc(pMsg);
break;
    }
}
void MusicPlay_TaskInit(void *pdata)
{
u8 i;
WM_HWIN hMusicPlay;
BUTTON_Handle hButton_MusicPlay[5];
PROGBAR_Handle ahMusicPlay;

MenuList pos=NULL;
(void)pdata;

Menu_ID=MusicPlayeMenu_ID;
OtherMenu_pHead=MenuListNodeCreate();//???¨???ò??±í
pos=OtherMenu_pHead;//??????±í?·?á??

exfuns_scan("0:/MUSIC");

hText_MusicPlay=TEXT_Create(5,20, 200, 25,5, WM_CF_SHOW,(const char*)musicinfo.MusicName,TEXT_CF_LEFT);
TEXT_SetTextAlign(hText_MusicPlay,GUI_TA_CENTER);
TEXT_SetTextColor(hText_MusicPlay,ThemeColor);
TEXT_SetFont(hText_MusicPlay,&GUI_FontHZ_MicrosoftFont_13);
pos=MenuListInsert(OtherMenu_pHead,pos,hText_MusicPlay);

ahMusicPlay=PROGBAR_Create(5,185,235,6,WM_CF_SHOW);
PROGBAR_SetBarColor(ahMusicPlay,0,ThemeColor);
PROGBAR_SetValue(ahMusicPlay,0);
pos=MenuListInsert(OtherMenu_pHead,pos,ahMusicPlay);

hButton_MusicPlay[0]=BUTTON_Create(5, 200, 60, 30, Button_ID0, WM_CF_SHOW);
hButton_MusicPlay[1]=BUTTON_Create(80, 200, 80, 30, Button_ID1, WM_CF_SHOW);
hButton_MusicPlay[2]=BUTTON_Create(175, 200, 60, 30, Button_ID2, WM_CF_SHOW);
hButton_MusicPlay[3]=BUTTON_Create(5, 235, 60, 30, Button_ID3, WM_CF_SHOW);
hButton_MusicPlay[4]=BUTTON_Create(5, 270, 60, 30, Button_ID4, WM_CF_SHOW);

BUTTON_SetText(hButton_MusicPlay[0],"?????ú");
BUTTON_SetText(hButton_MusicPlay[1],"??·?/????");
BUTTON_SetText(hButton_MusicPlay[2],"?????ú");
BUTTON_SetText(hButton_MusicPlay[3],"??·???±í");
BUTTON_SetText(hButton_MusicPlay[4],"???÷????");

for(i=0;i<5;i++)            //??°??ü??????±í
{
BUTTON_SetFont(hButton_MusicPlay,&GUI_FontHZ_MicrosoftFont_13);
BUTTON_SetTextAlign(hButton_MusicPlay,GUI_TA_CENTER|GUI_TA_VERTICAL);
   BUTTON_SetTextColor(hButton_MusicPlay,0,GUI_WHITE);
BUTTON_SetBkColor(hButton_MusicPlay,0,ThemeColor);
pos=MenuListInsert(OtherMenu_pHead,pos,hButton_MusicPlay);
}

OtherMenu_Info.FirstHandle =hText_MusicPlay;
OtherMenu_Info.EndHandle =hButton_MusicPlay[4];
ViscousWM(OtherMenu_pHead);//???????????????§??
OSTaskCreate(PlaySong_TaskInit,(void*)0,&laySong_Task_Stk[PLAYSONG_TASK_STK_SIZE-1],PLAYSONG_TASK_PRIO);
while(1)
{
if(TouchCmd == 1)
{
TouchCmd=0;
switch(GUI_GetKey())
{
case Button_ID0:

break;
case Button_ID1:

break;
case Button_ID2:

break;
case Button_ID3:
exfuns_scan("0:/MUSIC");
hMusicPlay=GUI_CreateDialogBox(MusicListCreate, GUI_COUNTOF(MusicListCreate), &MusicListCallback, 0, 0, 0);
// MyCreatDialog(0,0,hMusicPlay); 
break;
case Button_ID4:
Out_OtherMenu();            //?????è??????
Go_MainMenu();              //?????÷????
OSTaskDel(OS_PRIO_SELF);    //????×???
break;
default : 
TouchCmd = 1;
break;
}

}
OSTimeDlyHMSM(0, 0, 0, 15);
}
}

void PlaySong_TaskInit(void *pdata)
{
VS_HD_Reset();
VS_Soft_Reset();
vsset.mvol=220;
while(1)
{
while(musicinfo.PlaySongFlag==1)
{
mp3_play_song((u8*)musicbuf1);

}
OSTimeDlyHMSM(0, 0, 0, 6); 
}
}
u8 mp3_play_song(u8 *pname)
{  

  OS_CPU_SR cpu_sr;

    u16 br;
u8 res,rval;  
u8 *databuf;     
u16 i=0,j; 
// u8 key;      
  
rval=0;    
fmp3=(FIL*)mymalloc(SRAMIN,sizeof(FIL));//?ê??????
databuf=(u8*)mymalloc(SRAMIN,512); //??±?4096×????????????ò
if(databuf==NULL||fmp3==NULL)rval=0XFF ;//?????ê???§°?.
 
  VS_Restart_Play();   //??????·? 
VS_Set_All();         //?è????????????  
VS_Reset_DecodeTime(); //?????????±??  
// res=f_typetell(pname); //?????????ó×?  
OS_ENTER_CRITICAL();
res=f_open(fmp3,(const TCHAR*)pname,FA_READ);//?ò?????
OS_EXIT_CRITICAL();  
  if(res==0)//?ò??????.

// VS_SPI_SpeedHigh(); //????   
while(1)
{
res=f_read(fmp3,SD_Buffer,512,(UINT*)&br);//????4096??×???  
i=0;
if(br<512)
{
f_close(fmp3);
break;
}
VS_XDCS=0; 
while(i<500)
{
while(VS_DQ==0)
OSTimeDlyHMSM(0, 0, 0, 2);
for(j=i;j!=i+32;j++)
SPI1_ReadWriteByte(SD_Buffer[j]); 
i+=32;

}
// if(res!=0)
}

myfree(SRAMIN,databuf);        
myfree(SRAMIN,fmp3);
return rval;        
}

最佳答案

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

解决了  换了ucos和ucgui之后就行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
 楼主| 发表于 2015-5-31 11:00:33 | 显示全部楼层
解决了  换了ucos和ucgui之后就行了
回复

使用道具 举报

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
 楼主| 发表于 2015-5-31 12:56:54 | 显示全部楼层
没人遇到过类似问题嘛  搞了几天了 找不到问题出在哪啊啊啊啊啊啊
回复

使用道具 举报

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
 楼主| 发表于 2015-5-31 17:05:12 | 显示全部楼层
音乐播放时最高级任务  不可能被打断啊 可是将播放音乐的代码进入临界区就可以完整播放 这是怎么回事?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-5-31 18:49:03 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
 楼主| 发表于 2015-6-1 16:17:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥 我改了后音乐播放一段会进入HardFault_Handler 是什么原因??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-6-1 21:55:08 | 显示全部楼层
回复【5楼】小丶胖:
---------------------------------
不好说
看看是不是堆栈的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
529
金钱
529
注册时间
2014-10-9
在线时间
145 小时
 楼主| 发表于 2015-6-1 22:20:02 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
应该不是堆栈的问题 进入临界区是可以正常播放的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-23 17:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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