消息传递

有些情况下任务或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消息管理的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  3. 17.3-uC/OS-III消息管理(消息队列使用)

    多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...

  4. nexus 3.17.0 做为golang 的包管理工具

    nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...

  5. Gitea v1.17.0 正式发布 | 集成软件包管理器、容器镜像仓库

    我们自豪地宣布 Gitea v1.17.0 发布了.本次发布带来了诸多新特性和累积的更新,我们强烈建议用户在更新到最新版本之前仔细阅读发行注记. 在 1.17.0 版本的开发中我们一共合并了 645 ...

  6. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理

    在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...

  7. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  8. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  9. ASP.NET Core 1.0 中的依赖项管理

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  10. 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个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...

随机推荐

  1. v2ray和ss的安装资料整理

    v2ray: 1. https://yuan.ga/v2ray-complete-tutorial/ 2. https://toutyrater.github.io/ 推荐使用:v2ray,会比ss快 ...

  2. django 查询如何使用 or

    参考:http://stackoverflow.com/questions/6567831/how-to-perform-or-condition-in-django-queryset django自 ...

  3. 关于java中死锁的总结

    关于死锁,估计很多程序员都碰到过,并且有时候这种情况出现之后的问题也不是非常好排查,下面整理的就是自己对死锁的认识,以及通过一个简单的例子来来接死锁的发生,自己是做python开发的,但是对于死锁的理 ...

  4. 【iCore4 双核心板_FPGA】实验十八:Niosii——基于内部RAM建立第一个软核

    实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1mjpwGJI 密码:6u8v iCore4链接:

  5. tomcat启动时非常慢,启动时 一直卡在Root WebApplicationContext: initialization completed(转)

    转载地址:https://www.cnblogs.com/youxin/p/8793554.html 使用方式: JAVA_OPTS="-Djava.awt.headless=true -D ...

  6. 【Leetcode】收集

    万事总要有个开头,来吧. 问题原题看情况,如果我能用中文准确地表述出来的话那就用中文说一下.也有可能完全不说… ■ twoSum 问题: 参数是一个数组nums和一个目标数target,寻找nums中 ...

  7. Git分支操作——查看、新建、删除、提交、合并

    查看分支 1 查看本地分支 $ git branch   2 查看远程分支 $ git branch -r     创建分支 1 创建本地分支 $ git branch branchName 2 切换 ...

  8. R语言扩展包dplyr——数据清洗和整理

    R语言扩展包dplyr——数据清洗和整理 标签: 数据R语言数据清洗数据整理 2015-01-22 18:04 7357人阅读 评论(0) 收藏 举报  分类: R Programming(11)  ...

  9. Direct3D 11 Tutorial 1: Basics_Direct3D 11 教程1:基础

    Github-LearnDirectX-DX3D11 tutorial01 概述 在这第一篇教程中,我们将通过介绍创建最小Direct3D应用程序所必需的元素.每一个Direct3D应用程序必需拥有这 ...

  10. ATR的计算

    TR=∣最高价-最低价∣和∣最高价-昨收∣和∣昨收-最低价∣的最大值 TR = max(high-low, abs(last-high), abs(last-low)) ATR = MA(TR, N) ...