Vxworks 进程间通信1--消息队列

 

Vxworks 进程间通信1--消息队列

一.概念:

1.消息队列用于Task之间传递信息。

2.多个任务向同一个消息队列发送消息或接收消息。

3.ISR可以用NO_WAIT方式发送消息。

二.控制函数:

1. msgQCreate

[c-sharp] view plain copy
  1. MSG_Q_ID msgQCreate  
  2. (  
  3.     int maxMsgs, /* 消息队列长度(最大消息个数) */  
  4.   
  5.     int maxMsgLength, /* 消息队列中消息的最大长度*/  
  6.   
  7.     int options /* FIFO/PRIORITY 等待Task排队方式*/  
  8. )  

 

2. msgQSend

[c-sharp] view plain copy
  1. STATUS msgQSend  
  2. (  
  3.     MSG_Q_ID msgQId, /* 消息队列ID */  
  4.   
  5.     char *buffer, /* 指向要发送的消息的指针*/  
  6.   
  7.     UINT nBytes, /* 消息长度*/  
  8.   
  9.     int timeout, /* 超时时间(tick)/no-wait/forever */  
  10.   
  11.     int priority /* MSG_PRI_NORMAL 或MSG_PRI_URGENT */  
  12. )  

3.msgQReceive

[c-sharp] view plain copy
  1. int msgQReceive  
  2. (  
  3.     MSG_Q_ID msgQId, /* 消息队列ID */  
  4.   
  5.     char *buffer, /* 指向接消息的收缓冲的指针*/  
  6.   
  7.     UINT maxNBytes, /* 接收缓冲的字节数*/  
  8.   
  9.     int timeout /* 超时时间(tick)/no-wait/forever */  
  10. )  

 

4. msgQDelete

[c-sharp] view plain copy
  1. STATUS msgQDelete  
  2. (  
  3.     MSG_Q_ID msgQId /* 需要删除的消息队列的ID */  
  4. )  

一旦msgQDelete()操作执行完毕,阻塞在该消息队列上的Task,包括阻塞在发送队列、接收队列上的Task,都将被唤醒(Unpend),而消息队列的ID从此不再有效。

 

三.建议:

 

1.为每一个Task创建专用MsgQ。

2.所有需发给该Task的Message都送到唯一MsgQ。

3.因为消息队列有Copy & MaxLength的特性,所以消息队列中我们可以只存放指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值