17.2-uC/OS-III消息管理(任务消息队列)
1.任务的消息队列
uC/OS-III在任务中内建了一个消息队列。用户可以直接发送消息给
任务而不通过外部消息队列。 这个特性不仅简化了代码, 还提供了效
率。每个任务都内建一个消息队列。

uC/OS-III中与任务消息队列相关的服务都是以OSTask???()开头的。
设置OS_CFG.H中的OS_CFG_TASK_EN使能任务的消息队列服务。
与任务消息队列相关的代码在OS_TASK.C中。
2.双向通信
两个任务可以通过两个消息队列同步,这叫做双向通信, 这两个任务间可能互相发送消息给对方。
任务与ISR间不能双向通信,因为ISR不能在消息队列中等待。

这两个消息队列都被初始化为空。当左边的任务到达约定点时,它就会发送消息给顶部消息队列并在底部消息队列中等待消息。
类似的,当右边的任务到达某个时刻,它就会发送消息给底部消息队列,并在顶部消息队列中等待消息。
实现双向通信:

3.流量控制
任务间的通信经常通过从任务A中传送数据给任务B。然而,任务A创建该数据需要时间,且任务B可能在该数据被创建后经过很
长时间才接收到该数据。 换句话说, 如果更高优先级的任务抢占了任务B, 那么任务A所存放在消息队列中的数据就可能被溢出。
解决这个问题的一种方法是在处理中添加流量控制 。

在这里,使用了一个信号量计数值,该值初始化为任务B中消息队列长度。
任务A在发送消息给任务B之前必须获得信号量。任务B消息队列的空余量为多少,
信号量计数值就为多少。

4.保持数据在作用域中
消息通常指向结构体、变量、数组等。然而,数据必须被保持在其作用域( 结构体、 变量、 数组)
中直到接收者完成对这些数据的操作。 消息一旦被发送, 发送者就不能访问被发送的消息中所包含的数
据。这看起来很显然,但经常被忘记。
通过uC/OS-III中的分区管理器动态地分配和回收
内存块用于传递这些数据(消息中所包含的数据)。
17.2-uC/OS-III消息管理(任务消息队列)的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- 17.3-uC/OS-III消息管理(消息队列使用)
多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...
- 微信公众号开发C#系列-6、消息管理-普通消息接受处理
1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- 微信公众号开发C#系列-7、消息管理-接收事件推送
1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- 17.1-uC/OS-III消息管理(两种消息队列)
1.使用消息队列 消息队列函数: 函数名 功能 OSQCreate() 创建一个消息队列 OSQDel() 删除一个消息队列 OSQFlush() 清空一个消息队列 OSQPend() 任务等待消息 ...
- 17.0-uC/OS-III消息管理
消息传递 有些情况下任务或ISR与另一个任务间进行通信,这种信息交换叫做作业间的通信. 可以有两种方法实现这种通信: 全局变量. 发送消息. 1.果使用全局变量,任务或ISR就须确保它独占该变量.如果 ...
- 17.4-uC/OS-III消息管理(任务消息队列使用)
任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在, 只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息, 却不能接收.任务消息队列与(普 ...
随机推荐
- Elasticsearch模糊查询
前缀查询 匹配包含具有指定前缀的项(not analyzed)的字段的文档.前缀查询对应 Lucene 的 PrefixQuery . 案例 GET /_search { "query&qu ...
- Delphi XE以后的版本 程序如何瘦身
第一步:关闭debug infomation. 打开工程后,依次点击project--option--delphi compiler--linking 将右边Debug information改为Fa ...
- springboot2.x接口返回中文乱码
@Configuration public class GlobalConversConfiguration extends WebMvcConfigurationSupport { @Bean pu ...
- C++ char 类型:字符型和最小的整型
C++ 中没有 byte,Java 中有 byte. 但是 C++ 有 char,char 是可用来放整数的最小字节类型. #include <iostream> int main() { ...
- redhat 7.5 更换 yum源
因为 redhat 的 yum 是收费,所以需要换成 Centos 的 yum 才可以 首先,卸载 redhat 的 yum 软件 sudo rpm -qa|grep yum 其次,下载 Centos ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- sbt spark2.3.1 idea打包Caused by: java.lang.ClassNotFoundException: scala.Product$class
今天同事在服务区上面装的是最新版本的hadoop3.10和spark2.3.1,因为用scala开发, 所以我想用sbt进行开发.过程中遇到各种坑,刚开始用的jdk10,结果也报错,后来改成jdk1. ...
- NuGet Packages are missing,This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.
错误内容 This project references NuGet package(s) that are missing on this computer. Use NuGet Package R ...
- VS2013-2017 舒服的字体设置和背景色
使用字体:Fixedsys Excelsior 3.01 1.如果没有安装字体的话,首先下载字体:http://www.fixedsysexcelsior.com/ 2.安装字体:控制面板 -> ...
- linux查找并替换命令
find ./ -maxdepth 3 -type f -name "*Makefile" |xargs sed -i "s/CXX = g++/CXX = ccac ...