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个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...
随机推荐
- Openwrt 刷机后配置WAN口,安装luci和设置中文、安装挂载USB存储。
官方版本的ROM编译时时没有把luci和uhttpd打包进去的,所以,要ssh登录到路由器后手动安装,默认用户名root,密码是空. 如果你的路由器是挂载在其他路由下面的,DHCP可以获取到IP,能正 ...
- 【神经网络】Dependency Parsing的两种解决方案
一.Transition-based的依存解析方法 解析过程:首先设计一系列action, 其就是有方向带类型的边,接着从左向右依次解析句子中的每一个词,解析词的同时通过选择某一个action开始增量 ...
- HIVE metastore Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
HDP 版本:2.4.0.0-169. 解决:将hive 所在 节点上的/usr/hdp/2.4.0.0-169/hive/script/metastore/upgrade/msql/hive-sch ...
- hdoj:2048
#include <iostream> using namespace std; ]; ]; int main() { int C; a[] = ; a[] = ; b[] = ; b[] ...
- FasterRCNN原理(转)
在介绍Faster R-CNN之前,先来介绍一些前验知识,为Faster R-CNN做铺垫. 一.基于Region Proposal(候选区域)的深度学习目标检测算法 Region Proposal( ...
- 解决space-between最后一排问题
display:flex + justify-content: space-between 能够实现2端对齐的布局,这种布局在网页中很常见.不过这种布局方式有一个问题.举个例子,我们假设现在一排放4个 ...
- Rk3288 双屏异显单触摸
系统版本:RK3288 android 5.1 设备同时有两个lcd,主屏是mipi接口,带有触摸屏,触摸屏是usb接口,副屏是hdmi接口,没有触摸屏,正常情况下,两个lcd显示相同内容,触摸屏一切 ...
- git使用git-credential-winstore保存https访问密码
使用 https 方式 clone 一个 git 仓库,每次pull 或者 push 的时候都需要输入用户名和密码. 访问远程Git仓库可以用 SSH 方式和 https 方式,https 每次访问时 ...
- Excel导入工具类兼容xls和xlsx
package com.bj58.finance.platform.operation.provider.util; import org.apache.log4j.Logger; import or ...
- 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...