一个有趣的网络解释:

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

   邮箱,就好给比当差的下达的抄家、拆房、收监等红头文件,拿到啥样的文件就干啥。
   消息队列,就是给任务发了一连串的邮件,官员(任务)拿到这一大摞文件,可以从底部或者顶部(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. appium简明教程(6)——启动appium及android模拟器

    一般情况下,我们都从命令行启动appium. windows下,dos命令窗口输入 appium 如果该命令报错,那么请重装appium npm install -g appium 如果安装出错,请自 ...

  2. 论文笔记之:Playing for Data: Ground Truth from Computer Games

    Playing for Data: Ground Truth from Computer Games ECCV 2016 Project Page:http://download.visinf.tu- ...

  3. 让边框和文本一样高,不受line-height影响,可以使用padding,padding可以用于行内元素

    如果设置了,display:inline-block;边框大小至少和行高一样.这样就可能比文字高.

  4. Linux下PHP+MySQL+CoreSeek中文检索引擎配置

    说明: 操作系统:CentOS 5.X 服务器IP地址:192.168.21.127 Web环境:Nginx+PHP+MySQL 站点根目录:/usr/local/nginx/html 目的:安装co ...

  5. Mongo导出数据文件导致错误 Got signal: 6 (Aborted)解决方法

    一哥们要导出一个数据表的数据,结果导出一半,硬盘不够用,卡死了, 然后重启主机,导致mongo启动后进程自动死掉, 报错如下. Mon Oct 28 10:39:02.270 [initandlist ...

  6. python_Day3[set集合,函数,全局变量之篇]

    一.set集合 1.Set集合特点:无序.不重复,可嵌套 2.set集合创建规则:set = {"123","234"} 字典创建规则:dic = {“Key” ...

  7. 一个关于正整数x的约数个数的结论

    分析理解:x的每一个约数都是由x的若干个质因数的积构成. 再根据乘法原理,每个质因数Pi的选择可以是0~Ni个,所以上述结论成立.

  8. OpenJudge计算概论-找最大数序列

    /*===================================== 找最大数序列 总时间限制: 1000ms 内存限制: 65536kB 描述 输入n行(n 不大于 30),每行不超过10 ...

  9. Linux 下SVN自动更新

    1.找到svn的所在目录: 我的目录在/usr/local/svn/myproject 2.新建post-commit vim hooks/post-commit #!/bin/shexport LA ...

  10. RSA非对称加密 php的openssl实现

    <?php /** * 使用openssl实现非对称加密 * @since 2010-07-08 */ class Rsa { /** * private key */ private $_pr ...