17.0-uC/OS-III消息管理
消息传递
有些情况下任务或ISR与另一个任务间进行通信,这种信息交换叫做作业间的通信。
可以有两种方法实现这种通信: 全局变量、 发送消息。
1.果使用全局变量,任务或ISR就须确保它独占该变量。如果防止被ISR嵌套,
那么就只有关中断这种方法来保护这个变量。 如果是任务间共享该变量,
那么可以通过关中断、 锁调度器、 信号量、 mutex保护该变量。
需注意的是: 任务与ISR通信只能通过全局变量。 如果全局变量被ISR改变,
任务将不会知道全局变量被改变,除非该任务检测该变量或者ISR标记任务
告知该变量被改变。
2.消息可以被发送到媒介—消息队列中,也可以直接发送给任务,
因为uC/OS-III中每个任务都有其内建的消息队列。如果多个任务等
待这个消息时就将该消息发送到外部的消息队列。
当只有一个任务等待该消息时直接将消息发送给任务。
任务等待消息到达时,不占用CPU。
3.消息
消息中包含一个指向数据的指针、该数据的大小、时间戳变量。
该指针可以指向数据区域甚至是一个函数。
消息的发送方和消息的接收方都应该知道消息所包含的意义 .
数据不是被拷贝并发送给任务, 而是告诉任务数据的地址,
并让任务自己去访问。
4.消息队列
消息队列是内核对象。事实上,可以分配任意个消息队列(只要
处理器的RAM足够的话)。
通过消息队列用户可以做很多事情,ISR中只能调用OSQPost()。

如上图,接收任务旁的沙漏表示该任务可以设置等待期限。如果
任务没有在规定时间内接收到该消息, uC/OS-III会返回一个错误代
号表示任务被就绪不是因为接收到消息,而是等待超时。
消息队列是先入先出模式( FIFO)。然而, uC/OS-III也可以将其
设置为后入先出模式( LIFO)。 若任务或ISR发送紧急消息给另一个
任务时, 后入先出模式是非常有用的, 在这种情况下, 该紧急消息绕
过消息队列中的其他消息。消息队列的长度可以在运行时设置。
息发送者可以广播这个消息给消息队列中的所有任务。 在这种情况下,
如果接收到消息中有优先级高于消息发送者优先级的任务,
uC/OS-III就会切换到这个高优先级的任务。
注意:不是每个任务都需要设置等待期限,有些任务可能需要永远等待这个消息。

17.0-uC/OS-III消息管理的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- 17.3-uC/OS-III消息管理(消息队列使用)
多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...
- nexus 3.17.0 做为golang 的包管理工具
nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...
- Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库
我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理
在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- ASP.NET Core 1.0 中的依赖项管理
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Spring Boot发布2.6.2、2.5.8:升级log4j2到2.17.0
12月22日,Spring官方发布了Spring Boot 2.5.8(包括46个错误修复.文档改进和依赖项升级)和2.6.2(包括55个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...
随机推荐
- java中random()函数用法介绍
Random() 创建一个新的随机数生成器. 代码如下 复制代码 Random(long seed) 使用单个 long 种子创建一个新的随机数生成器. 我们可以在构造Random对象的时候指定种子 ...
- redis跳跃表
最近在阅读redis设计与实现,关于redis数据结构zset的一种底层实现跳跃表一直没有太理解,所以在搜了一下资料,终于搞懂了它的设计思路,记录一下. 参考链接:https://mp.weixin. ...
- MXNET:卷积神经网络
介绍过去几年中数个在 ImageNet 竞赛(一个著名的计算机视觉竞赛)取得优异成绩的深度卷积神经网络. LeNet LeNet 证明了通过梯度下降训练卷积神经网络可以达到手写数字识别的最先进的结果. ...
- Virtual配置
没有ifconfig yum upgrade yum install net-tools yum源配置: https://jingyan.baidu.com/article/215817f7aef2e ...
- css3 animation 在某些浏览器中特别快 bugfix
今天在一款三星 4.2.2 的 webview 里,出现 animation 特别快的问题,把: .xxx{ -webkit-animation: xxx 24s linear infinite; } ...
- Caffe 分类问题 Check failed: error == cudaSuccess (2 vs. 0) out of memory
如果图片过大,需要适当缩小batch_size的值,否则使用GPU时可能超出其缓存大小而报错
- python 读取mysql数据至csv文件中,并发送邮件
test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...
- 磁盘 I/O 优化
磁盘 I/O 优化 1. 性能检测 我们的应用程序通常都需要访问磁盘系统,而磁盘 I/O 通常都很耗时, 要判断 I/O 是否是一个瓶颈,有一些参数指标可以参考. 我们可以压力测试应用程序看系统的 I ...
- Glide和Govendor安装和使用
两个都是Go的包管理工具,二选一 Glide参考:golang 依赖管理 /etc/profile #Go export GOROOT=/home/lintong/software/go export ...
- Uncaught InvalidStateError: Failed to set the 'value' property on 'HTMLInputElement': This input element accepts a filename, which may only be programmatically set to the empty string.
使用 HTML5 的图片上传api的时候报如下错误: Uncaught InvalidStateError: Failed to set the 'value' property on 'HTMLIn ...