VxWorks学习笔记(三)——任务间通信之消息队列

本文详细介绍了VxWorks中任务间通信的重要机制——消息队列,包括其工作方式、状态变化及常用函数如创建、删除、发送和接收消息的详细操作。消息队列支持多任务同时操作,提供了全双工交互的可能,并通过不同选项实现优先级或FIFO的排队规则。文章还讨论了消息队列在满状态、空状态之间的转换,以及消息发送和接收时的阻塞与超时策略。
摘要由CSDN通过智能技术生成

本文主要对任务间通信机制中的消息队列进行总结介绍。

信号量的同步和互斥机制可以方便、高效地协调人物,但是无法提供完善的响应式交互信息方式。因此引入消息队列。

工作方式

  • 多个任务可以同时操作同一个消息队列或者向其发送消息,或者接收消息。对于ISR,可以设置为不等待(NO_WAIT)的方式向其发送消息。在创建消息队列时,需要指定消息队列长度(最大消息数)以及每条变长消息的最大长度,以及任务的排队方式等。

  • 若多个任务之间需要进行全双工交互,那么最好为每个任务创建一个消息队列(可以理解为每个人物都拥有一个自己的信箱)。

状态

刚创建好的消息队列是空的,此时消息队列处于空状态。向消息队列发送/接收消息,其结果是增加/减少消息队列中消息的数目;当数目达到消息队列长度时,消息队列为满状态。消息队列处于空状态与满状态之间时,统称为非空状态。

常用函数

消息队列的创建

  • 消息队列通过msgQCreate函数来创建,系统将统一分配一个消息队列ID,所有操作都将围绕这个ID进行。

  •  MSG_Q_ID msgQCreate
     (
         int maxMsgs,    /* 消息队列长度(消息队列中最大消息个数)*/
         int maxMsgLength,   /* 消息队列中消息的最大长度 */
         int options     /* 选项 */
     )
  • 选项与信号量类似,有三种取值

    • MSG_Q_PRIORITY:阻塞在消息队列上的

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值