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个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...
随机推荐
- shell 实例
转载自:https://github.com/liquanzhou/ops_doc 这里只作为笔记使用,不做他用 shell实例手册 0 说明{ 手册制作: 雪松 更新日期: 2018-09-1 ...
- atitit 如何才能保持基业长青,建立万年企业v2 q66.docx
1. 价值观 1 2. 分权 民主化 扁平化管理 1 3. 剥离经济部门,,降低经济的重要性 .超越利润的追求 1 4. 构建愿景 1 5. 强大的团队文化 企业文化 宗教文化 .教派般的文化 1 1 ...
- Delphi如何创建并绘制EMF图形文件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Python中的__name__和类
1. python中if __name__ == '__main__': 的解析 经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是 ...
- Linux配置定时,使用 crontab -e 与 直接编辑 /etc/crontab 的区别
转自:http://blog.csdn.net/catoop/article/details/41821395 版权声明:本文为博主原创文章,未经博主允许不得转载. Linux配置定时任务,大家都知道 ...
- GLSL版本的区别和对比
之前尝试将一个GLSL version 110的版本写成GLSL version 330的,在此将学习过程和收获记录下来. 参考链接 GLSL Versions 介绍 你可以使用#version命令作 ...
- iOS之HTTP和HTTPS的基本知识和应用
HTTPS的基本使用 1.https简单说明HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道 ...
- layui动态数据表格-分页
数据结构 $list = [ [,'], [,] ]; $json[; $json['; $json[; $json['data'] = $list; return json($json); 代码: ...
- 【转】app之YdbOnline说明文档
概述 YdbOnline是面向网页开发者提供的网页开发工具包. 通过使用YdbOnline,网页开发者可借助YdbOnline高效地使用语音.位置等手机系统的能力,同时可以直接使用清除缓存.扫一扫等A ...
- 从头配置,开发 cocos2dx 3.14.1
要使用cocos2dx写一个麻将测试工具. 配置流程如下: 1. 下载安装最新版本的VS(VS2017): https://www.visualstudio.com/zh-hans/downloads ...