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/ ...
随机推荐
-
使用Fragment 实现动态UI 和 动态添加Fragment
首先写好每个Fragment: 1.在第一个Fragment写一个按钮,使其加载下一个Fragment 布局: <LinearLayout xmlns:android="http:// ...
-
codeforces 431 D. Random Task 组合数学
题意: 给定m,k 0 <= m <= 10^18 ,1 <= k <= 64 求一个数n,满足n+1,n+2,...n+n这n个数中,刚好有m个数的2进制表示法刚好有k个1 ...
-
C#获取设备的IP和Mac类
/// <summary> /// 此类用于获得设备的Ip和Mac /// </summary> public class Mac { [DllImport("Iph ...
-
python之函数学习
#!/usr/bin/env python # # =============================================== # 位置参数说明 # 位置参数 通过参数传递的位置来 ...
-
分布式锁实现秒杀 - 基于redis实现
业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品:将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢, ...
-
CSS——对height和line-height的理解
最近在做CSS界面时经常遇到line-height和height这两个属性,一直没搞很明白,今天静下心来好好网上查阅了一下,算是有所领悟.https://blog.csdn.net/a20131263 ...
-
小妖精的完美游戏教室——东方project,同人,自机
//================================================================ //// Copyright (C)// All Rights R ...
-
原生js的ajax请求
传统方法的缺点: 传统的web交互是用户触发一个http请求服务器,然后服务器收到之后,在做出响应到用户,并且返回一个新的页面,,每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次 ...
-
Mac IntelliJ IDEA 2017(java开发集成环境)附注册码和破解教程 v2017.3.5破解版
原文:http://www.orsoon.com/Mac/155938.html 原文中含有软件下载地址 软件介绍 IntelliJ IDEA 2017 Mac激活版是Mac平台上的一款java开发集 ...
-
day 23 网络编程
C/S架构 Client与Server B/S架构 Browser与Server windows上查看端口占用情况 netstat -a OSI七层模型: 其他略...