VxWorks中的消息队列实现

作者:佚名 上传时间:2023-03-25 运行软件:Wind River Systems 软件版本:VxWorks 6.9 版权申诉

本示例主要介绍了在VxWorks中使用消息队列进行进程间通信的实现方式。使用msgQSend和msgQReceive函数可以分别发送和接收消息,并且可以设置如何处理阻塞和非阻塞状态。此外,示例代码还展示了如何使用semGive和semTake函数来实现信号量同步。

#include <vxWorks.h>
#include <msgQLib.h>
#include <semLib.h>
#include <stdio.h>

#define MAX_MSG_SIZE 100

MsgQId msgQId; //消息队列ID
SEM_ID semId; //信号量ID

void task1(void)
{
    char msg[MAX_MSG_SIZE] = "Hello, VxWorks!";
    while (1) {
        semTake(semId, WAIT_FOREVER); //等待信号量
        if (msgQSend(msgQId, msg, strlen(msg) + 1, NO_WAIT, MSG_PRI_NORMAL) == ERROR) {
            printf("Error sending message.\n");
        }    
    }
}

void task2(void)
{
    char msg[MAX_MSG_SIZE];
    int nBytesReceived;
    while (1) {
        nBytesReceived = msgQReceive(msgQId, msg, MAX_MSG_SIZE, WAIT_FOREVER);
        if (nBytesReceived == ERROR) {
            printf("Error receiving message.\n");
        } else {
            printf("Received message: %s\n", msg);
            semGive(semId); //释放信号量
        }    
    }
}

int main(void)
{
    msgQId = msgQCreate(10, MAX_MSG_SIZE, MSG_Q_FIFO); //创建消息队列

    semId = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY); //创建空信号量

    taskSpawn("t1", 90, 0, 10000, (FUNCPTR)task1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    taskSpawn("t2", 90, 0, 10000, (FUNCPTR)task2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    while (1)
        taskDelay(sysClkRateGet() * 10); //延时等待

    return 0;
}

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
vxworks消息队列代码
描述如何正确应用vxworks下的消息队列的方法,是完整的应用代码。
C
0B
2019-01-15 05:34
vxworks实验消息队列
vxworks实验,消息队列vxworks实验,消息队列
PDF
0B
2019-09-09 02:23
VxWorks消息队列实现
本示例主要介绍了在VxWorks中使用消息队列进行进程间通信的实现方式。使用msgQSend和msgQReceive函数可以分别发送和接收消息,并且可以设置如何处理阻塞和非阻塞状态。此外,示例代码还展
VxWorks 6.9
Wind River Systems
2023-03-25 07:26
VxWorks消息队列实现方式
本文介绍了在VxWorks中实现消息队列的方法,详细讲解了使用消息队列进行进程间通信的步骤及注意事项。/* 创建消息队列 */msgQId myMsgQ;myMsgQ = msgQCreate(
VxWorks 6.9
Wind River Systems
2023-03-30 13:06
VxWorks实现消息队列方案
在VxWorks中,消息队列是一种常用的进程间通信方式,通过实现消息队列,进程间可以简单快捷地共享数据和信息。下面给出一种VxWorks中实现消息队列的方案,可供参考。/*创建消息队列*/MSG_
VxWorks 6.9
C语言
2023-04-27 13:30
VxWorks实现消息队列方法
本文介绍在VxWorks操作系统中实现消息队列的方法,减少了任务之间的耦合度和增强数据交换的可靠性。//create a message queue 创建一个消息队列MSG_Q_ID qId =
VxWorks7.0
VxWorks操作系统
2023-05-19 08:29
VxWorks系统实现消息队列方法
消息队列是一种在多个任务之间传递数据的方法,VxWorks系统中提供了消息队列的实现方法。使用消息队列可以实现任务之间的数据传递,实现方法简单易懂,方便调试。/* 创建消息队列 */MSG_Q_I
VxWorks 6.9
VxWorks系统
2023-04-29 17:46
VxWorks如何实现消息队列
VxWorks消息队列在VxWorks中,消息队列是一种用于进程间通信的可靠机制。消息队列提供了一种方式来传递数据,使得发送者和接收者可以异步地进行操作。消息队列可以被多个任务共享,而且每个任务可以
6.9+
VxWorks实时操作系统
2023-03-22 23:25
php Memcache实现消息队列
Memcache 一般用于缓存服务。但是很多时候,比如一个消息广播系统,需要一个消息队列。直接从数据库取消息,负载往往不行。如果将整个消息队列用一个key缓存到memcache里面.
PDF
39KB
2020-10-31 08:37
VxWorks实现基于消息队列进程通信
本示例展示了如何在VxWorks中使用消息队列来实现不同进程之间的通信。通过消息队列,可以实现异步的数据传输,确保进程间数据通信的可靠性和高效性。/* 创建消息队列 */MSG_Q_ID msgQ
VxWorks 7
Wind River Systems
2023-04-26 17:30