|
本帖最后由 hpdell 于 2018-8-24 09:44 编辑
请教下,标志组有些消息收不到是怎么回事啊 ?
/* 等待所有任务发来事件标志 */
uxBits = xEventGroupWaitBits(xCreatedEventGroup, /* 事件标志组句柄 */
0xFFFE, /* 等待0xFFFE某一位被设置 */
pdTRUE, /* 退出前0xFFFE位被清除,这里是任意0xFFFE位被设置就“退出”*/
pdFALSE, /* 设置为pdTRUE表示等待0xFFFE任意位被设置*/
portMAX_DELAY); /* 等待延迟时间 */
具体描述如下:
1、在 freertos 任务里面 某首曲目自动播放完成后就发送 下一个信息给 emwin
/* 给emWin的音乐播放器发消息,切换到下一首歌曲播放 */
WM_SendMessageNoPara(hWinVideo, MSG_NextMusic);
2、emwin 收到 MSG_NextMusic 这个信息后,处理一些相关的数据后再发送
emwin收到的信息:
case MSG_NextMusic:
if(hTimerProcess)
{
WM_DeleteTimer(hTimerProcess);
hTimerProcess =0;
}
g_tWav.ucDispUpdate = 1; //初始化为 1
s_ucPlayStatus =1; //播放状态初始化为 暂停状态,2018.08.17
/*1. 获取下一首要播放音频的序号 */
hItem = WM_GetDialogItem(hWinVideoList, GUI_ID_LISTVIEW0);
MusicPlayNum++;
if(MusicPlayNum == LISTVIEW_GetNumRows(hItem))
{
MusicPlayNum = 0;
}
/* 2. 获取音频名 */
LISTVIEW_GetItemText(hItem, 0, MusicPlayNum, buf, VideoPathSzie);
/* 3. 显示音频名到界面上 */
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
TEXT_SetText(hItem, (const char *)buf);
/* 4. 将音频完整的路径复制到缓冲s_VideoName里面 */
memset(s_VideoName, 0, VideoPathSzie);
strcpy((char *)s_VideoName, s_VideoPathDir);
strcat((char *)s_VideoName, buf);
/* 5. 显示当前音频播放序号和总的音频数量 */
hItem = WM_GetDialogItem(hWinVideoList, GUI_ID_LISTVIEW0);
sprintf(buf, "%d/%d", MusicPlayNum + 1, LISTVIEW_GetNumRows(hItem));
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
TEXT_SetText(hItem, (const char *)buf);
/* 6. 播放音频 */
s_tMusicMsg.ucName = (uint8_t *)s_VideoName;
_FileType = FATFS_GetFileType((char *)s_VideoName);
switch(_FileType)
{
case T_AVI:
// avi 视频
s_tMusicMsg.ucType = MusicType_AVI;
break;
case T_EMF:
// emf 视频
s_tMusicMsg.ucType = MusicType_EMF;
break;
default:
USART_OS_Printf("Video format is not supported ? \r\n"); //是视频格式不支持
break;
}
/*
给音乐任务发送歌曲路径,因为emWin多任务的执行,
此时音乐任务被挂起,回调消息执行完才会回到音乐任务 。
*/
pMusicMsg = &s_tMusicMsg;
if( xQueueSend(xQueue,
(void *)&pMusicMsg,
(TickType_t)portMAX_DELAY) == pdPASS)
{
/* 继续发消息,启动歌曲播放 */
// xEventGroupSetBits(xCreatedEventGroup, MusicTaskAudioStart_8);
// 获取视频总的播放时间后再设置播放进度条范围
switch(s_tMusicMsg.ucType)
{
case MusicType_AVI:
{
GetAVIInfo((const char *)s_VideoName); //获取视频帧时间
} break;
case MusicType_EMF:
{
// GetMP3Info(s_MusicName);
} break;
}
hItem = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_0);
SLIDER_SetRange(hItem, 0, g_tWav.uiTotalTime);
SLIDER_SetValue(hItem, 0);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetText(hItem, (const char *)g_tWav.usInfo);
sprintf(buf, "%02d:%02d:%02d/%02d:%02d:%02d",
0,
0,
0,
g_tWav.uiTotalTime/3600,
g_tWav.uiTotalTime%3600/60,
g_tWav.uiTotalTime%60);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
TEXT_SetFont(hItem, &GUI_FontLubalGraph20B);
TEXT_SetText(hItem, buf);
/* 继续发消息,启动歌曲播放 */
xEventGroupSetBits(xCreatedEventGroup, MusicTaskAudioStart_8);
/* 继续发消息,启动歌曲播放 */
hTimerProcess = WM_CreateTimer(pMsg->hWin, ID_TIMER_PROCESS, 500, 0);
USART_OS_Printf("Video Player next ... \r\n"); //播放下一曲
}
break;
3、在 FreeRTOS 任务里面貌似始终都没有收到
MusicTaskAudioStart_8 这个信息啊 ???
在任务里面貌似收到的一直是 MusicTaskAudioGetTime_7 或者是 MusicTaskReserved_4 ??????????????????
|
|