vxworks下任务间消息队列通信例程
来源:互联网 发布:vatic windows 编辑:程序博客网 时间:2024/05/21 02:11
vxworks下任务间消息队列通信例程/* msgQDemo.h - Header for the msgQDemo *//* Copyright 1984-1997 Wind River Systems, Inc. *//*modification history--------------------01b,06nov97,mm added copyright.01a,14dec93,ms written.*/#define CONSUMER_TASK_PRI 99 /* Priority of the consumer task */#define PRODUCER_TASK_PRI 98 /* Priority of the producer task */#define TASK_STACK_SIZE 5000 /* stack size for spawned tasks */struct msg { /* data structure for msg passing */int tid; /* task id */ int value; /* msg value */};LOCAL MSG_Q_ID msgQId; /* message queue id */LOCAL int numMsg = 8; /* number of messages */LOCAL BOOL notDone; /* Flag to indicate the completion of this demo */============================================================================/* msgQDemo.c - Demonstrates intertask communication using Message Queues *//* Copyright 1984-1997 Wind River Systems, Inc. *//*modification history--------------------01c,06nov97,mm added copyright.01b,19sep97,ram added include files stdio.h, sysLib.htested ok01a,14dec93,ms written.*//* includes */#include "VxWorks.h"#include "taskLib.h"#include "msgQLib.h"#include "msgQDemo.h"#include "sysLib.h"#include "stdio.h"/* function prototypes */LOCAL STATUS producerTask (); /* producer task */LOCAL STATUS consumerTask (); /* consumer task *//****************************************************************************** msgQDemo - Demonstrates intertask communication using Message Queues ** DESCRIPTION* Creates a Message Queue for interTask communication between the * producerTask and the consumerTask. Spawns the producerTask that creates * messages and sends messages to the consumerTask using the message queue. * Spawns the consumerTask that reads messages from the message queue. * After consumerTask has consumed all the messages, the message queue is * deleted.** RETURNS: OK or ERROR** EXAMPLE** -> sp msgQDemo**/STATUS msgQDemo(){notDone = TRUE; /* initialize the global flag *//* Create the message queue*/if ((msgQId = msgQCreate (numMsg, sizeof (struct msg), MSG_Q_FIFO)) == NULL){perror ("Error in creating msgQ");return (ERROR);}/* Spwan the producerTask task */if (taskSpawn ("tProducerTask", PRODUCER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR) producerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR){perror ("producerTask: Error in spawning demoTask");return (ERROR);} /* Spwan the consumerTask task */if (taskSpawn ("tConsumerTask", CONSUMER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR) consumerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR){perror ("consumerTask: Error in spawning demoTask");return (ERROR);}/* polling is not recommended. But used to make this demonstration simple*/while (notDone)taskDelay (sysClkRateGet ());if (msgQDelete (msgQId) == ERROR){perror ("Error in deleting msgQ");return (ERROR);}return (OK);}/****************************************************************************** producerTask - produces messages, and sends messages to the consumerTask * using the message queue. ** RETURNS: OK or ERROR**/STATUS producerTask (void){int count;int value;struct msg producedItem; /* producer item - produced data */ printf ("producerTask started: task id = %#x \n", taskIdSelf ());/* Produce numMsg number of messages and send these messages */for (count = 1; count <= numMsg; count++){value = count * 10; /* produce a value *//* Fill in the data structure for message passing */producedItem.tid = taskIdSelf ();producedItem.value = value;/* Send Messages */if ((msgQSend (msgQId, (char *) &producedItem, sizeof (producedItem), WAIT_FOREVER, MSG_PRI_NORMAL)) == ERROR){perror ("Error in sending the message");return (ERROR);}elseprintf ("ProducerTask: tid = %#x, produced value = %d \n", taskIdSelf (), value);}return (OK);}/****************************************************************************** consumerTask - consumes all the messages from the message queue. ** RETURNS: OK or ERROR**/STATUS consumerTask (void){int count;struct msg consumedItem; /* consumer item - consumed data */printf ("\n\nConsumerTask: Started - task id = %#x\n", taskIdSelf());/* consume numMsg number of messages */for (count = 1; count <= numMsg; count++){/* Receive messages */if ((msgQReceive (msgQId, (char *) &consumedItem, sizeof (consumedItem), WAIT_FOREVER)) == ERROR){perror ("Error in receiving the message");return (ERROR);}else printf ("ConsumerTask: Consuming msg of value %d from tid = %#x\n",consumedItem.value, consumedItem.tid);}notDone = FALSE; /* set the global flag to FALSE to indicate completion*/return (OK);}
- vxworks下任务间消息队列通信例程
- 【VxWorks系列】任务间同步与通信之消息队列
- vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件、共享内存等
- vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件、共享内存等
- vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件
- vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件、共享内存等
- Linux下多任务间通信和同步-消息队列
- Linux下多任务间通信和同步-消息队列
- Linux下多任务间通信和同步-消息队列
- vxworks任务间通信
- Vxworks 进程间通信1--消息队列
- VxWorks任务间通信机制
- Vxworks任务间的通信
- 关于vxWorks下消息队列的实现
- Linux下进程间通信--消息队列
- VxWorks中基于消息队列实现C/S通信
- ucos II 任务间 通信之五:消息队列1
- ucos II 任务间 通信之五:消息队列2
- __DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__宏定义
- 找工作
- 姚明评Jeremy
- Java web(2012/2/19)
- ios应用的生命周期
- vxworks下任务间消息队列通信例程
- Java 中 抽象类与 接口的应用
- 冒泡排序(借助中间变量和不借助中间变量)
- c++三种函数传参方式
- c++ 虚函数实现机制
- 安装mplayer后没有声音解决方法
- Vxworks消息队列例解
- 基于AVALON总线的IP核定制 PWM
- 飞蚂蚁