⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgqdemo.c

📁 vxworks demo 有问题写信给我
💻 C
字号:
/* 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.h		 tested 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 *//***************************************************************************** *  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);        }     /* 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 j,count,value;    struct msg producedItem;           /* producer item - produced data */     struct msg consumedItem;           /* consumer item - consumed data */    /* Produce numMsg number of messages and send these messages */   for(j=0;j<4;j++){    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);        }        else        {            printf ("ProducerTask: tid = %#x, produced value = %d \n",                                               taskIdSelf (), value);        }    }    /* 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); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -