17.1-uC/OS-III消息管理(两种消息队列)
1.使用消息队列
消息队列函数:
| 函数名 | 功能 |
| OSQCreate() | 创建一个消息队列 |
| OSQDel() | 删除一个消息队列 |
| OSQFlush() | 清空一个消息队列 |
| OSQPend() | 任务等待消息 |
| OSQPendAbort() | 任务被不再等待该消息 |
| OSQPost() | 提交一个消息给消息队列 |
任务中消息队列函数:
| 函数名 | 功能 |
| OSTaskQPend() | 等待一个消息 |
| OSTaskQPendAbort() | 任务被不再等待该消息 |
| OSTaskQPost() | 发送一个消息给任务 |
| OSTaskQFlush() | 清空这个消息队列 |
2.客户端和服务器端
错误管理任务管理其它任务或ISR发给它的错误情况。

3.消息队列的组成
消息由四个变量组成:指向下一条消息的指针、用于表明该消息所指向数据的大小的变量、
存放消息最后一次被提交的时间戳的变量、消息中包含一个指向实际数据的指针。
消息发送者和接收者都不知道消息中数据的结构因为这些都通过uC/OS-III的API隐藏起来了。

uC/OS-III维护一个消息池。消息池的大小通过OS_CFG_APP.H中的OS_CFG_MSG_POOL_SIZE设置。
当uC/OS-III被初始化时, 消息就会以单向列表的形式链接起来如图15-12。注意的是这个列表由
结构体OS_MSG_POOL管理, 它包含3个部分: .NextPtr指向该消息列表、.NbrFree包含了该队列
的空闲消息数、 .NbrUsed包含了该队列中已被使用的消息数。

消息的排列由结构体OS_MSG_Q控制 :

.InPtr 指向下一个将要被插入到队列的消息。
.OutPtr 指向下一个将要被释放的消息。
.NbrEntriesSize 包含了该队列所能接受的最大消息数。队列满后再往其中发送消息,消息将不会被插入。
.NbrEntries 当前队列中的消息数。
.NbrEntriesMax 记录了到目前为止队列中存放的最大消息数。
4.uC/OS-III中有一些函数用于操纵空闲的队列和消息。
比如:OS_MsgQPut()将消息插入到OS_MSG_Q, OS_MsgQGet()从
OS_MSG_Q中得到一个消息, OS_MsgQFreeAll()将所有OS_MSQ_Q
中的消息释放回消息池中。 OS_MSG.C中的其它一些OS_MsgQ??()
在初始化时使用。

OS_MSG_Q通常包含在两种结构体内: OS_Q和OS_TCB。创建一个OS_Q时就内建一个OS_MSG_Q。
当设置OS_CFG.H中的OS_CFG_TASK_Q_EN为1时,每个任务都有其内建的消息队列。

17.1-uC/OS-III消息管理(两种消息队列)的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- RabbitMQ实现延时消息的两种方法
目录 RabbitMQ实现延时消息的两种方法 1.死信队列 1.1消息什么时候变为死信(dead-letter) 1.2死信队列的原理 1.3 代码实现 1.4死信队列的一个小坑 2 .延时插件 2. ...
- Linux 服务管理两种方式service和systemctl
Linux 服务管理两种方式service和systemctl 1.service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 # service命令启动redis脚本 ...
- JMS两种消息模型
前段时间学习EJB.接触到了JMS(Java消息服务),JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和公布订阅模型. ...
- 17.2-uC/OS-III消息管理(任务消息队列)
1.任务的消息队列 uC/OS-III在任务中内建了一个消息队列.用户可以直接发送消息给任务而不通过外部消息队列. 这个特性不仅简化了代码, 还提供了效率.每个任务都内建一个消息队列. uC/OS-I ...
- 17.4-uC/OS-III消息管理(任务消息队列使用)
任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在, 只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息, 却不能接收.任务消息队列与(普 ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现
前言 前前一篇留了个小问题,在上一篇中忘了写了,就是关于LayIM已经封装好的上传文件或者图片的问题.对接好接口之后,如果上传速度慢,界面就会出现假死情况,虽然文件正在上传.于是我就简单做了个图标替代 ...
- spark streaming 接收kafka消息之一 -- 两种接收方式
源码分析的spark版本是1.6. 首先,先看一下 org.apache.spark.streaming.dstream.InputDStream 的 类说明: This is the abstrac ...
- SpringBoot使用JMS(activeMQ)的两种方式 队列消息、订阅/发布
刚好最近同事问我activemq的问题刚接触所以分不清,前段时间刚好项目中有用到,所以稍微整理了一下,仅用于使用 1.下载ActiveMQ 地址:http://activemq.apache.org/ ...
随机推荐
- Effective Java 第三版—— 90.考虑序列化代理替代序列化实例
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- Android 架构:Android Jetpack 架构组件的学习和分析
参考:https://mp.weixin.qq.com/s/n-AzV7Ke8wxVhmC6ruUIUA 参考:https://jekton.github.io/2018/06/30/android- ...
- pandas DataFrame(5)-合并DataFrame与Series
之前已经学过DataFrame与DataFrame相加,Series与Series相加,这篇介绍下DataFrame与Series的相加: import pandas as pd s = pd.Ser ...
- SQL注入学习资料总结
转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html 什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...
- spring MVC配置详解(转)
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...
- Java基础-多线程学习目录
1.Java多线程并发编程一览笔录 2.什么时候使用CountDownLatch 3.Java并发学习系列-绪论
- js 正则表达式验证网站域名
正则表达式 ^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$
- 移动网页广告引入mraid.js使用指南
在网上找mraid相关资料,相对比较少,大多都是API介绍,概念介绍等,没有一份详细的移动端网页广告使用教程,经过自己两天的摸索,完成了开发的移动端网页版的广告加入mraid功能. 背景: 我开发了移 ...
- Oracle字段根据逗号分割查询数据
需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询. 数据是这样的: 查询的sql如下: select * from ( select gu ...
- VBA 全局常量定义
Public Const INDEX As Integer = 16 Public Const RESULT_SHEET As String = "result" Public C ...