消息队列的基础使用
/*消息队列
* :任务A向任务B发送消息
* */
#include<stdio.h>
#include<taskLib.h>
#include<wdLib.h>
#include<unistd.h>
#include<msgQLib.h>
#define TASK_PRIORITY_A 130
#define TASK_PRIORITY_B 130
#define STACK_SIZE 225
int taskId_A, taskId_B;
/*发送的消息*/
#define MSG "Hello"
/*定义消息队列*/
MSG_Q_ID msgId;
/*定义两个Task*/
void taskA(void);
void taskB(void);
int taskDemo() {
/*创建任务:taskSpawn创建并激活任务*/
taskId_A=taskSpawn("taskA", TASK_PRIORITY_A, VX_FP_TASK, STACK_SIZE,
(FUNCPTR)taskA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
taskId_B=taskSpawn("taskB", TASK_PRIORITY_B, VX_FP_TASK, STACK_SIZE,
(FUNCPTR)taskB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (taskId_A==ERROR)
printf("taskA taskSpawn() failed!\n");
if (taskId_B==ERROR)
printf("taskB taskSpawn() failed!\n");
}
void taskA() {
/*创建消息队列*/
msgId=msgQCreate(20,256,MSG_Q_PRIORITY);
if(msgId==NULL)
printf("msgQCreate() error!\n");
/*发送消息*/
msgQSend(msgId,MSG,sizeof(MSG),WAIT_FOREVER,MSG_PRI_NORMAL);
printf("TaskA send message!\n");
}
void taskB() {
int flag=1;
char buf[225];
/*存储消息队列信息的结构体*/
MSG_Q_INFO msgInfo;
/*休眠一秒,等待taskA发送消息*/
sleep(1);
/*显示消息队列中的信息数量*/
msgQShowInit();
msgQInfoGet(msgId,&msgInfo);
printf("Message num in Queue:%d\n",msgInfo.numMsgs);
/*接收消息*/
msgQReceive(msgId,buf,sizeof(MSG),WAIT_FOREVER);
printf("TaskB get message:%s",buf);
/*删除消息队列*/
if(msgQDelete(msgId)==ERROR)
printf("msgQDelete() error!\n");
}
运行结果
TaskA send message!
Message num in Queue:1
TaskB get message:Hello