创建了两个任务task1 和 task2。同时创建消息队列,在task1中发送消息给task2,在task1中发送一个消息,OSQPostFront(g_pOS_MsgQ_Task2,(void *));
下面是task2接收接收消息的处理。
void task2(void *pvData)
{
void *pMsgVoid;
INT8UucOSError;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Task1,m_Com_usTaskTimeOutTicks, &ucOSError);
}
}
我现在的问题是,我在发送消息的时候,发送自定义的一个结构体
typedef struct UCOS_MSG{
INT32U ulMsgID; //消息ID
INT8U aucData[4]; //消息内容
}STRU_MSG
怎么将STRU_MSG * pMsg发送出去,并在任务task2里获得pMsg的值。
接收消息任务
void comTask(void *pvData)
{
INT8U ucOSError;
INT32U ulMsgID;
void *pMsgVoid;
char ucRevMsg[20];
pvData = pvData;
while(1)
{
pMsgVoid = OSQPend(g_pOS_MsgQ_Com,m_Com_usTaskTimeOutTicks, &ucOSError);//2005-08-22 返回消息指针
if(pMsgVoid)
{
uart0SendStr("receive Msg \n");
ulMsgID = *(INT32U *)pMsgVoid;
switch(ucOSError)
{
case OS_NO_ERR:
{
uart0SendStr("receive Msg no error \n");
sprintf(ucRevMsg,"%d\n",ulMsgID);
uart0SendStr(ucRevMsg);
// 串口显示
*
if(ulMsgID==13)
{
uart0SendStr("receive Msg 13\n");
}
else
{
uart0SendStr("receive other Msg \n");
}
}
break;
case OS_TIMEOUT:
break;
case OS_ERR_EVENT_TYPE:
case OS_ERR_PEND_ISR:
default:
break;
}
uart0SendStr("exit Msg \n");
}
}
}
|