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/ ...
随机推荐
- 原创科幻短篇《VR》
近些年VR很火,现在似乎又降温了,那么问题来了:VR到底有前景吗?我农村来的读书又少看不清楚哇.近些年房地产很火,现在似乎还是很火,那么问题来了:房价到底会降吗?我农村来的读书又少看不清楚哇. 以下正 ...
- Mongodb常用增删改查语法
1,新增 新增有两种方式 var Tank = mongoose.model('Tank', yourSchema); var small = new Tank({ size: 'small' }); ...
- 【OpenFOAM案例】02 自己动手
前言:很多人说OpenFOAM很难,要啃上很多的理论书籍,什么流体力学.计算流体力学.矩阵理论.线性代数.数值计算.C++程序设计神马的,看看光这一堆书就能吓倒绝大多数的人.其实我们并不一定要从这些基 ...
- r里面如何实现两列数据合并为一列
library(dplyr) unite(mtcars, "vs_am", vs, am) Merging Data Adding Columns To merge two dat ...
- 使用JavaScript验证用户输入的是否为正整数
在项目开发中,需要使用JavaScript验证用户输入的是否为正整数. 方法一: var type="^[0-9]*[1-9][0-9]*$"; var r=new RegExp( ...
- Mysql获取最大自增ID(auto_increment)的五种方式及其特点
在关系型数据库的表结构中,一般情况下,都会定义一个具有‘AUTO_INCREMENT’扩展属性的‘ID’字段,以确保数据表的每一条记录都有一个唯一标识. 而实际应用中,获取到最近最大的ID值是必修课之 ...
- ubuntu14.04安装MATLAB R2017b步骤详解
转载:https://blog.csdn.net/qq_32892383/article/details/79670871 1. 前言最近由于项目原因,需要在ubuntu上安装MATLAB,在网上找了 ...
- SpringMVC Controller单例和多例
对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...
- mac 互传文件
搭建HTTP服务,然后局域网访问就行 PHP方式: php -S 172.21.205.xxx:9999 Python python -m SimpleHTTPServer 8001 在浏览器访问:h ...
- JS设计模式——观察者模式(通俗易懂)
Observer模式的概念 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同步通信的手段 ...