#include "vxWorks.h"
#include "msgQLib.h"
/* defines */
#define MAX_MSGS (10)
#define MAX_MSG_LEN (100)
MSG_Q_ID myMsgQId;
//任务3仅仅创建消息队列
task3(void)
{
/* create message queue */
if ((myMsgQId = msgQCreate (MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY)) == NULL)
return (ERROR);
}
//任务2完成接收,并显示
task2 (void)
{
char msgBuf[MAX_MSG_LEN];
/* get message from queue; if necessary wait until msg is available */
if (msgQReceive(myMsgQId, msgBuf, MAX_MSG_LEN, WAIT_FOREVER) == ERROR)
return (ERROR);
/* display message */
logMsg ("Message from task 1:\n%s\n", msgBuf, 0,0,0,0,0);
}
//任务1里延时5秒,验证【任务2】要等到消息到来时,才会有输出
#define MESSAGE "Greetings from Task 1"
task1 (void)
{
taskDelay (sysClkRateGet()*5);//延时5秒
if (msgQSend (myMsgQId, MESSAGE, MAX_MSG_LEN, WAIT_FOREVER,
MSG_PRI_NORMAL) == ERROR)
return (ERROR);
/* send a normal priority message, blocking if queue is full
if (msgQSend (myMsgQId, MESSAGE, sizeof (MESSAGE), WAIT_FOREVER,
MSG_PRI_NORMAL) == ERROR)
return (ERROR);
*/
}
void TestMsgQ(void)
{
taskSpawn("t3",100,0,0x20000,(FUNCPTR)task3,0,0,0,0,0,0,0,0,0,0);
taskSpawn("t2",100,0,0x20000,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
taskSpawn("t1",100,0,0x20000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
}