UCOS-2 消息邮箱与队列
一个有趣的网络解释:
信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官。(当然官印也可随时被政府收回(因腐败违反纪律等问题被剥夺优先权而分给其他人,当然以后表现好还可复出),或者嫌累或工资低自己封印辞官)
邮箱,就好给比当差的下达的抄家、拆房、收监等红头文件,拿到啥样的文件就干啥。
消息队列,就是给任务发了一连串的邮件,官员(任务)拿到这一大摞文件,可以从底部或者顶部(LIFO or FIFO)一个一个拆开处理。
信号量:主要负责管理.OSEventCnt域,管理信号量计数。单值信号量是对系统管理的(遵守规则)某种有限特定资源进行互斥申请享用(有时间限制,不能长期霸占),对于已被占用的要么等待或特权占用(优先级高,但必须系统管理员许可,不可直接占用)。多值信号量好比十字楼口的交通员手势信号(或信号灯),每台车虽然不占用其它车道资源,但要想通过必须听同一个信号的安排。
三种常见的信号量(VXWOKRS):
二进制(位标志):可实现任务间通讯的互斥上锁和同步(如共享的内存缓冲区域或IO资源),常在中断系统中使用,
互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量
互斥信号量与二进制不同点在于:
①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;
②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;
③因为semTake和semGive是成对出现的,因此不能在ISR 中释放(semGive ())。
计数式信号量:每次释放,计数器加一,每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞,从而保持对信号量释放次数的跟踪。
邮箱与消息队列的异同:
相同点:都基于事件控制块,用于进行任务间的通讯和同步,收发的对象包括定向和非定向(可指定接收对象或共享的其它任务),具体操作方式包括阻塞式或非阻塞式(接收时仅检查信息后就返回是非阻塞,确认对方接收到才返回是阻塞;发送等对方接收后才返回是阻塞;不管对方接收就返回是非阻塞式),基本操作包括创建 发 查询(MSMboxAccept() 检查消息,返回;OSMboxQuery()查询状态) 接收 删除。
区别:消息队列在OS_EVENT结构基础之上添加了一循环队列,可以同时容纳多个消息,而邮箱只能容纳一个。因此,可以将消息队列看作同时接收多条消息的邮箱。采用了循环缓冲方法。将二维数组在逻辑上连接成首尾相接的环,提供了读定指针,有效提供了读写的效率及便利
邮箱:负责管理.OSEventPtr域,管理单个消息的发帝与接收。它是一个指针型变量。可以向一个任务或一个中断服务子程序发送一则消息(一个指针),也可以当作只取2个值的信号量来用
UCOS-2 消息邮箱与队列的更多相关文章
- ucos事件邮箱信号量队列详解
Ucos的事件分为时钟,信号量,互斥性信号量,消息队列,以及消息邮箱 首先说信号量 信号量在ucos中的类型定义为OS_EVENT_TYPE_SEM,在任务控制块ecb中,主要是用到的是信号量计数器O ...
- ucosii事件控制块------消息邮箱与消息队列
UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...
- 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构. 二.实验截图: ...
- RTX——第16章 消息邮箱
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面几个章节主要给大家讲解了任务间的同步和资源共享机制,本章节为大家讲解任务间的通信机制消息邮箱,RTX ...
- FreeRTOS 任务计数信号量,任务二值信号量,任务事件标志组,任务消息邮箱
以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 计数信号量的另一种实现方式----基于任务通知(Task Not ...
- rabbitmq之消息重入队列
说起消息重入队列还得从队列注册消费者说起,客户端在向队列注册消费者之后,创建的channel也会被主队列进程monitor,当channel挂掉后,主队列进程(rabbit_amqqueue_proc ...
- MSMQ 队列消息和死信队列
日志消息 日志队列可以保存你操作过的消息的备份.它的好处是,一但发现前面的操作失败,可以从日志队列中重新创建出原先的消息对象,然后再进行操作. 例如,向远方发送一个消息对象,然后对方返回一个失败的确认 ...
- μC/OS-II 任务的同步与通信 --- 消息邮箱
简介 如果把数据缓冲区的指针赋给一个事件控制块的成员 OSEventPrt,同时使事件控制块的成员 OSEventType 为常数 OS_EVENT_TYPE_MBOX,则该事件控制块就叫做消息邮箱, ...
- RabbitMQ Queue中Arguments属性参数过期队列,过期消息,超时队列的声明
开发十年,就只剩下这套Java开发体系了 >>> 创建队列时指定参数 队列属性:x-message-ttl 可以控制被publish到queue中的message 被丢弃前能够存 ...
随机推荐
- Unity入门知识
参考书:<Unity3D 游戏开发> ● scene图中按F键:放大,居中当前选中的物体 ● 坐标轴:红-x轴,绿-y轴,蓝-z轴 ● 逐帧运行程序: ● OnGUI:可以用来画界面 ● ...
- Phython 学习笔记之——类的初步认识
类是面向对象编程的核心,他扮演相关数据及逻辑容器的角色.他们提供了创建实例对象的蓝图.因为python语言不要求必须以面向对象的方式编程(与JAVA不同),这里简单的举一个例子. 如何定义一个类 cl ...
- 【转】弹出可拖动的DIV层提示窗口
来源:www.divcss5.com <html> <head> <meta http-equiv="Content-Type" content=&q ...
- display模版详细介绍
ASP.NET MVC 2 Templates, Part 4: Custom Object Templates Series Index Part 1: Introduction Part 2: M ...
- IOS:被误解的MVC和被神化的MVVM
MVC的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架. ...
- hadoop(四): 本地 hbase 集群配置 Azure Blob Storage
基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...
- innertext与innerhtml
<div id="test"> <span style="color:red">test1</span> test2 < ...
- Linux环境下vsftpd参数配置
很久之前就用过vsftpd,但总是忘了参数该如何配置,今天特地有搜索了一遍,把配置方法整理如下: (1)检查是否已安装vsftpd #rpm -qa | grep vsftpd vsftpd--.el ...
- WPF 数据绑定
1.1绑定到对象 1.1.1.前台绑定 前台代码 5: </Grid> 1: <Grid x:Name=”GridProductDetails”> 2: 3: <Te ...
- php正则替换所有空格和换行
替换所有空格为空 $contents=" abc "; $contents=preg_replace('/\s+/','',$contents); //结果$contents=&q ...