消息传递
有些情况下任务或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 参考配置 来自官方的配置 ...
-
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个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...
-
uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
随机推荐
-
SDUT2241计算组合数C(n,m)(组合数)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2241 这个题的代码适应性也挺强,但这个题倒不适 ...
-
PDB符号文件信息
一.前言 这个方法是通过网上的一些方式自己学习枚举PDB文件信息. 二.代码实现 首先枚举驱动文件,这里用psapi库 #include "psapi.h" #pragma com ...
-
Am命令
Am.java中: Override public void onRun() throws Exception { mAm = ActivityManagerNative.getDefault(); ...
-
.net数据根据字段进行分类(linq语句)
var items = List<实体>; var models = items.GroupBy(r => r.分类字段).ToDictionary(d => d.Key, d ...
-
解析XML的方法
解析XML的方法 1.DOM生成和解析XML 2.SAX生成和解析XML 3.DOM4J生成和解析XML 4.JDOM生成和解析XML
-
MVC4 下DropDownList使用方法(转)
与MVC3相比,差别很大: 表现形式一: public ActionResult Main() { List<SelectListItem> items = new List<Sel ...
-
1085 Perfect Sequence (25 分)
1085 Perfect Sequence (25 分) Given a sequence of positive integers and another positive integer p. T ...
-
iOS.Dev.Guru
1. Ricardo Quesada Cocos2d https://github.com/ricardoquesada http://www.elance.com/s/rquesada/ 2. Je ...
-
Oracle 之 表新增字段后修改字段顺序
工作中遇到:在为一个表新增字段后,新增字段在最后,想调整新增字段的位置. 1.原始方法: --新建临时表以存储正确的顺序 create table A_2 as select (column1,col ...
-
PHP高级教程-邮件
PHP 发送电子邮件 PHP 允许您从脚本直接发送电子邮件. PHP mail() 函数 PHP mail() 函数用于从脚本中发送电子邮件. 语法 mail(to,subject,message,h ...