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 第三版——67. 明智谨慎地进行优化
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- Centos7.4 安装Docker
一.安装docker yum install -y docker 二.启动docker服务 systemctl start docker 三.设置成开机启动docker服务 systemctl ena ...
- Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别
Atitit orm的实现模式 data-mapper模式和active-record模式有什么区别 1.1. 这是来自Node.js路线有关混合两种ORM模式Active Record(活动记录模 ...
- Clash Royale开发日志
2018-04-17 本次更新: [修复点击时间bug] [修复断线重连后不自动开始脚本bug] 2018-04-16 本次更新增加以下功能: [支持断线重连机制(5分钟)] [界面UI设置] 201 ...
- Selenium Web 自动化
1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用A ...
- JVM系列——从菜鸟到入门
持续更新系列. 参考自<深入理解Java虚拟机>.<Java性能权威指南>.<分布式Java应用基础与实践>. Java的内存结构 JVM系列——运行时数据区 JV ...
- spring boot 配置注入
spring boot配置注入有变量方式和类方式(参见:<spring boot 自定义配置属性的各种方式>),变量中又要注意静态变量的注入(参见:spring boot 给静态变量注入值 ...
- class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。
class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...
- java直接生成zip压缩文件精简代码(跳过txt文件)
/** * @param args */ public static void main(String[] args) throws Exception{ ZipOutputStream zos = ...
- 关于HOOK KiPageFault需要用到自旋锁研究
KeAcquireSpinLockRaiseToDpc 可以使用这个函数 来开启自旋锁