UCOS-2 消息邮箱与队列

 一个有趣的网络解释数组

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

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

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

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

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

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

互斥信号量与二进制不一样点在于:继承

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

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

③由于semTake和semGive是成对出现的,所以不能在ISR 中释放(semGive ())。

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

邮箱与消息队列的异同:

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

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

 

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

相关文章
相关标签/搜索