uc/os-iii学习笔记-消息传递

消息


  • 一则消息包含几个部分:指向数据的指针、表明数据长度的变量、记录消息发布时刻的时间戳。
  • 指针指向的可以是一块数据区或者一个函数。
  • 消息的内容必须一直保持可见性,即消息的便令必须在接收消息的任务代码范围内有效。

消息队列

这里写图片描述
如图所示,消息通过OS_MSG_Q结构体组成一个消息队列,其中InPtr指针指向下一个消息插入的位置,OutPtr指针指向下一个将要取出的消息的位置。
在OS_MSG结构是消息的结构体,其中MsgSize顾名思义就是消息的长度参数,MsgTS就是消息的时间戳,而MsgPtr指针指向的就是数据区或者函数。
整体数据结构关系如下图所示:
这里写图片描述

任务自己也有一个内建的消息队列,通过内建消息队列可以更加简单快速的进行消息的操作。
同任务内嵌信号量一样,UCOSIII的每个任务中也有内建消息队列。而且多个任务等待同一个消息队列的应用很少见,UCOSIII中每个任务多有其内建消息队列的话用户可以不用通过外部的消息队列而直接向任务发布消息。
如果需要使用任务内建消息队列功能的时候需要将宏OS_CFG_TASK_Q_EN置1来使能相关的代码。


消息的相关函数如下图所示:


下图是消息队列:

这里写图片描述

举个例子:
OSQCreate ((OS_Q*       )&KEY_Msg,//消息队列
           (CPU_CHAR*   )"KEY Msg",//消息队列名称
           (OS_MSG_QTY  )KEYMSG_Q_NUM,//消息队列长度
           (OS_ERR* )&err); //返回错误信息
           其他的函数差不多同理,可以自行查看源码,离开源码是无法知晓具体流程的!!!!!

下图是内建消息队列:

这里写图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值