ucos-ii消息队列

[复制链接]
查看11 | 回复1 | 2011-8-16 18:30:07 | 显示全部楼层 |阅读模式
创建了两个任务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");
}
}       
}

回复

使用道具 举报

千问 | 2011-8-16 18:30:07 | 显示全部楼层
通过指针获得该结构体,通过“地址”发送结构体1、发送消息如下:addr = & pMsg; OSQPost(xxxxxxxxxxxx, addr); 其中,addr——INT32U类型变量;pMsg——是你的结构体变量;xxxxxxxxxx——你的消息队列2、接收消息方法如下:STRU_MSG * msgRcvd; // 创建一个结构体类型的指针msgRcvd = (STRU_MSG *)OSQPend(xxxxxxxxxxxx,m_Com_usTaskTimeOutTicks,&ucOSError);
...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行