问题是将消息数据填入队列,经查询消息得出的结果也对,但是等待消息函数得到的结果却总是最后一条消息数据,很纳闷,不知怎么解? 请大侠们赐教
我的目标是假如我将消息数据取出来之后,可以通过对不同的数据做判断而进行不同的函数调用。例如:见【红色部分】
void msgSend(void* pdata)//消息队列发送添加任务
{
INT8U msg=SYS_RECV0;//需要发出消息 SYS_RECV0=15
【消息数据初始】
OS_Q_DATA queue_data;//保存从消息队列事件控制块中获取的数据信息
INT32U *data, *data2;
OS_Q_DATA *pq;
while(1)
{
OSQQuery(s_QDRecv0MsgQueue,&queue_data);//查询本消息队列信息
data=queue_data.OSMsg;
UartStrInt(\"queue_data.OSNMsgs=\", queue_data.OSNMsgs); // 调试输出
UartStrInt(\"queue_data->OSMsg=\", *data); // 调试输出
if(queue_data.OSNMsgs
{
UartSendString(\"msgSend .\\r\\n\");
OSQPostOpt(s_QDRecv0MsgQueue,(void*)&msg,OS_POST_OPT_NONE);//OS_POST_OPT_BROADCAST //OS_POST_OPT_FRONT
【将初始数据填入队列】
//pq = (OS_Q_DATA *)s_QDRecv0MsgQueue->OSEventPtr;
// data2=pq->OSMsg;
// UartStrInt(\"data2\",*data2);
//将消息通过队列广播给所有需要等待消息的任务
msg++;//产生新的消息
UartStrInt(\"msgSend msg \\r\\n\", msg);
}
else//
{
OSTimeDlyHMSM(0,0,1,0);//队列满,延时1s
}
}
}
void msgRev1(void* pdata)//消息队列接收任务1void msgSend(void* pdata)//消息队列发送添加任务
{
OS_Q_DATA queue_data;
INT8U return_code=OS_NO_ERR;
INT32U *data;
INT8U *msg;
while(1)
{
OSQQuery(s_QDRecv0MsgQueue,&queue_data);//查询本消息队列信息
data=queue_data.OSMsg;
UartStrInt(\"Rev1queue_data.OSNMsgs=\", queue_data.OSNMsgs);
UartStrInt(\"Rev1queue_data->OSMsg=\", *data); // 调试输出
if(!queue_data.OSNMsgs)//本消息队列是否已满
{
UartSendString(\"msgRev1 SYS_RECV0 send over.\\r\\n\"); // 调试输出
}else
{
msg=(INT8U*)OSQPend(s_QDRecv0MsgQueue,WAIT_FOREVER,&return_code);
if(*msg==SYS_RECV0) //
例如:【这里 如果我取到 SYS_RECV0 这个数据 我就可以做另外的函数调用】
{
UartSendString(\"msgRev1 SYS_RECV0 .\\r\\n\"); // 调试输出
}
UartStrInt(\"msgRev1 msg \\r\\n\", *msg); // 调试输出
}
//接收消息,如果没有接收到就一直等待
// IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, 0x01);
OSTimeDlyHMSM(0,0,0,100);//延时300ms
}
}
这是调试结果:
queue_data.OSNMsgs= 0
queue_data->OSMsg= -442503144
msgSend .
msgSend msg 15
queue_data.OSNMsgs= 1queue_data->OSMsg= 15 msgSend .
msgSend msg 16
queue_data.OSNMsgs= 2queue_data->OSMsg= 16 msgSend .
msgSend msg 17queue_data.OSNMsgs= 3
queue_data->OSMsg= 17 msgSend .
msgSend msg 18
queue_data.OSNMsgs= 4
queue_data->OSMsg= 18msgSend .
msgSend msg 19 queue_data.OSNMsgs= 5 queue_data->OSMsg= 19msgSend .
msgSend msg 20 queue_data.OSNMsgs= 6 queue_data->OSMsg= 20msgSend .
msgSend msg 21 queue_data.OSNMsgs= 7 queue_data->OSMsg= 21msgSend .
msgSend msg 22 queue_data.OSNMsgs= 8 queue_data->OSMsg= 22msgSend .
msgSend msg 23 queue_data.OSNMsgs= 9 queue_data->OSMsg= 23msgSend .
msgSend msg 24 queue_data.OSNMsgs= 10 queue_data->OSMsg= 24
Rev1queue_data.OSNMsgs= 10 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
【主要问题在这里:为什么不是从 15 到 14 ,结果都是 24 ,】
Rev1queue_data.OSNMsgs= 9 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 8 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 7 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 6 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 5 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 4 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 3 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 2 Rev1queue_data->OSMsg= 24 msgRev1 msg 24
Rev1queue_data.OSNMsgs= 1 Rev1queue_data.OSNMsgs= 1 queue_data->OSMsg= 24
msgSend .
msgSend msg 25 queue_data.OSNMsgs= 2 queue_data->OSMsg= 25msgSend .
msgSend msg 26 queue_data.OSNMsgs= 3 queue_data->OSMsg= 26msgSend .
msgSend msg
27queue_data.OSNMsgs= 4queue_data->OSMsg= 27msgSend .
msgSend msg
28queue_data.OSNMsgs= 5queue_data->OSMsg= 28msgSend .
msgSend msg
29queue_data.OSNMsgs= 6queue_data->OSMsg= 29msgSend .
msgSend msg
30queue_data.OSNMsgs= 7queue_data->OSMsg= 30msgSend .
msgSend msg
31queue_data.OSNMsgs= 8queue_data->OSMsg= 31msgSend .
msgSend msg
32queue_data.OSNMsgs= 9queue_data->OSMsg= 32msgSend .
msgSend msg
同理。。。。。。这样一直下去