一个有趣的网络解释:

信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官。(当然官印也可随时被政府收回(因腐败违反纪律等问题被剥夺优先权而分给其他人,当然以后表现好还可复出),或者嫌累或工资低自己封印辞官)

   邮箱,就好给比当差的下达的抄家、拆房、收监等红头文件,拿到啥样的文件就干啥。
   消息队列,就是给任务发了一连串的邮件,官员(任务)拿到这一大摞文件,可以从底部或者顶部(LIFO or FIFO)一个一个拆开处理。

信号量:主要负责管理.OSEventCnt域,管理信号量计数。单值信号量是对系统管理的(遵守规则)某种有限特定资源进行互斥申请享用(有时间限制,不能长期霸占),对于已被占用的要么等待或特权占用(优先级高,但必须系统管理员许可,不可直接占用)。多值信号量好比十字楼口的交通员手势信号(或信号灯),每台车虽然不占用其它车道资源,但要想通过必须听同一个信号的安排。

三种常见的信号量(VXWOKRS):

二进制(位标志):可实现任务间通讯的互斥上锁和同步(如共享的内存缓冲区域或IO资源),常在中断系统中使用,

互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量

互斥信号量与二进制不同点在于:

①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;

②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;

③因为semTake和semGive是成对出现的,因此不能在ISR 中释放(semGive ())。

计数式信号量:每次释放,计数器加一,每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞,从而保持对信号量释放次数的跟踪。

邮箱与消息队列的异同:

相同点:都基于事件控制块,用于进行任务间的通讯和同步,收发的对象包括定向和非定向(可指定接收对象或共享的其它任务),具体操作方式包括阻塞式或非阻塞式(接收时仅检查信息后就返回是非阻塞,确认对方接收到才返回是阻塞;发送等对方接收后才返回是阻塞;不管对方接收就返回是非阻塞式),基本操作包括创建 发 查询(MSMboxAccept() 检查消息,返回;OSMboxQuery()查询状态) 接收 删除。

区别:消息队列在OS_EVENT结构基础之上添加了一循环队列,可以同时容纳多个消息,而邮箱只能容纳一个。因此,可以将消息队列看作同时接收多条消息的邮箱。采用了循环缓冲方法。将二维数组在逻辑上连接成首尾相接的环,提供了读定指针,有效提供了读写的效率及便利

邮箱:负责管理.OSEventPtr域,管理单个消息的发帝与接收。它是一个指针型变量。可以向一个任务或一个中断服务子程序发送一则消息(一个指针),也可以当作只取2个值的信号量来用

UCOS-2 消息邮箱与队列的更多相关文章

  1. ucos事件邮箱信号量队列详解

    Ucos的事件分为时钟,信号量,互斥性信号量,消息队列,以及消息邮箱 首先说信号量 信号量在ucos中的类型定义为OS_EVENT_TYPE_SEM,在任务控制块ecb中,主要是用到的是信号量计数器O ...

  2. ucosii事件控制块------消息邮箱与消息队列

    UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...

  3. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱

    一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构.   二.实验截图:   ...

  4. RTX——第16章 消息邮箱

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面几个章节主要给大家讲解了任务间的同步和资源共享机制,本章节为大家讲解任务间的通信机制消息邮箱,RTX ...

  5. FreeRTOS 任务计数信号量,任务二值信号量,任务事件标志组,任务消息邮箱

    以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 计数信号量的另一种实现方式----基于任务通知(Task Not ...

  6. rabbitmq之消息重入队列

    说起消息重入队列还得从队列注册消费者说起,客户端在向队列注册消费者之后,创建的channel也会被主队列进程monitor,当channel挂掉后,主队列进程(rabbit_amqqueue_proc ...

  7. MSMQ 队列消息和死信队列

    日志消息 日志队列可以保存你操作过的消息的备份.它的好处是,一但发现前面的操作失败,可以从日志队列中重新创建出原先的消息对象,然后再进行操作. 例如,向远方发送一个消息对象,然后对方返回一个失败的确认 ...

  8. μC/OS-II 任务的同步与通信 --- 消息邮箱

    简介 如果把数据缓冲区的指针赋给一个事件控制块的成员 OSEventPrt,同时使事件控制块的成员 OSEventType 为常数 OS_EVENT_TYPE_MBOX,则该事件控制块就叫做消息邮箱, ...

  9. RabbitMQ Queue中Arguments属性参数过期队列,过期消息,超时队列的声明

    开发十年,就只剩下这套Java开发体系了 >>>   创建队列时指定参数 队列属性:x-message-ttl 可以控制被publish到queue中的message 被丢弃前能够存 ...

随机推荐

  1. Hadoop SPARK 环境搭建

    http://www.linuxidc.com/Linux/2015-02/113486.htm http://www.cnblogs.com/lijingchn/p/5574476.html htt ...

  2. java_stack

    栈是一种数据结构,它代表只能在某一端进行插入.删除操作的特殊线性表. 栈的最大特点是是后进先出(First In Last Out),对栈的操作主要是入栈和出栈,判断栈是否为空,计算栈的大小. 对栈而 ...

  3. 20150911 for循环的用法以及小题目

    for: for(初始条件,条件表达式,状态改变) { 循环体 } //100块钱,买2元一只的圆珠笔,3块钱一个的尺子,5元一个的铅笔盒,每样至少一个,正好花光,请问有多少中画法. //一张纸0.0 ...

  4. 如何处理ABBYY中出现错误代码142和55的问题

    在使用ABBYY FineReader 12OCR文字识别软件创建PDF文件时,有时会出现以下错误提示:内部程序错误..\Src\SpecialFontFactory.cpp,142和内部程序错误.. ...

  5. axure 母版 模板

    axure的模板区域是非常重要的一个功能,网站的头部.尾部部分等很多页面同时用到的内容,都可以使用母版,因为在母版中只需要修改一次,就可以实现所有的页面更新,可以大大的加速原型的制作速度.需要重复理解 ...

  6. ArrayList、linklist、list的区别

    List是一个接口,ArrayList和LinkedList是两个实现类,他们实现的方式不一样,其实LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两 ...

  7. CSS控制print打印样式

    来源:http://blog.csdn.net/pangni/article/details/6224533 一.添加打印样式 1. 为屏幕显示和打印分别准备一个css文件,如下所示:   用于屏幕显 ...

  8. javascript 函数节流方法

    函数节流可以缓解调用的次数,代码如下: function throttle(method,delay){ var timer=null; return function(){ var context= ...

  9. 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案

    问题一:“未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ...

  10. MySQL Show命令的使用

    show tables或show tables from database_name; 解释:显示当前数据库中所有表的名称 show databases; 解释:显示mysql中所有数据库的名称 sh ...