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消息管理(任务消息队列使用)
任务消息队列跟任务信号量一样,均隶属于某一个特定任务, 不需单独创建,任务在则在, 只有该任务才可以接收这个任务消息队列的消息,其他任务只能给这个任务消息队列发送消息, 却不能接收.任务消息队列与(普 ...
随机推荐
- zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本
微信个人告警脚本 微信个人告警:使用个人微信,发送到微信群组,微信好友 两个脚本执行: 1)能连接网络2)先执行server.py,扫描登录微信,登录之后没有报错,打开新终端查看端口是否起来了3)在z ...
- 修改Dreamweaver CC 2017 代码背景颜色
Windows系统路径: E:\Program Files\Adobe\Dreamweaver CC\www\extensions\default\LightTheme\main.less (如果用的 ...
- Myeclipse安装、配置、测试
Myeclipse安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与激活 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发测试(确保服务器和 ...
- npm WARN React-native@0.35.0 requires a peer of react@~15.3.1 but none was installed.
解决方案: 方法一: npm install -save react@~15.3.1 方法二:在package.json中可以添加依赖 "dependencies": { &quo ...
- Git入门到高级系列1-git安装与基础命令
视频课程地址 腾讯课堂 为什么要进行项目文件的版本管理 代码备份和恢复 团队开发和协作流程 项目分支管理和备份 git 是什么? git是一个分布式的版本控制软件.版本控制是一种记录一个或若干文件内容 ...
- [转]$.post() 和 $.get() 如何同步请求
原文地址:https://blog.csdn.net/sunnyzyq/article/details/78730894 由于$.post() 和 $.get() 默认是 异步请求,如果需要同步请求, ...
- 【资料下载区】【iCore1S相关代码、资料下载地址】更新日期2017/10/09
[iCore1S相关文档][更新中...] iCore1S原理图(PDF)下载iCore1S引脚注释(PDF)下载 [iCore1S相关例程代码][ARM][更新中...] DEMO1.0测试程序发布 ...
- mysql密码的坑
一段时间没用本机的mysql,忘了root密码,从网上找的修改方法用起来大多都有问题.mysql版本8.0.12. 网上大多数思路:修改msql启动方式为带--skip-grant-tables参数: ...
- 了解cron以及使用cron定时备份MySQL
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: /sbin/service c ...
- permutohedral lattice理解
[完结]saliency filters精读之permutohedral lattice 2012年09月28日 22:40:08 工长山 阅读数:12432 版权声明:本文为博主原创文章,未经 ...