打印

请问ucos中的信号量,邮箱和消息队列在应用有什么区别

[复制链接]
14782|19
手机看帖
扫描二维码
随时随地手机跟帖
沙发
soso| | 2008-6-28 08:05 | 只看该作者

这样给你解释

    信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官。
   邮箱,就好给比当差的下达的抄家、拆房、收监等**,拿到啥样的文件就干啥。
   消息队列,就是给任务发了一连串的邮件,官员(任务)拿到这一大摞文件,可以从底部或者顶部(LIFO or FIFO)一个一个拆开处理。

使用特权

评论回复
板凳
afeifeia| | 2008-6-28 10:30 | 只看该作者

解释的太牛了

  LS解释的太牛了

使用特权

评论回复
地板
平常人| | 2008-6-28 10:51 | 只看该作者

2楼的解释绝对是误导,根本上概念是错的

而且比喻极不恰当。

使用特权

评论回复
5
soso| | 2008-6-28 11:08 | 只看该作者

期待楼上斧正

   想见识你的理解?我这样理解也是这样用的。

使用特权

评论回复
6
jack.king|  楼主 | 2008-6-28 11:48 | 只看该作者

4楼的大侠您能帮我解释下不

使用特权

评论回复
7
平常人| | 2008-6-28 23:15 | 只看该作者

先说说信号量吧

信号量的英文原文是semaphore,semaphore的原意是铁路系统上使用的可见信号,可以是旗语、灯号或人们手臂的摇动,用于指示火车的行驶;后来semaphore的意思引申为发出信号;在计算机的软件系统中,尤其是操作系统中,semaphore是一种控制机制,用于控制多进程环境中对特定资源的互斥访问。

你可以把信号量理解为交通信号灯,交通信号灯的目的是用于控制路口的交通,交通路口是一种特定资源,必须实行互斥访问,否则交通混乱且易出交通事故。在十字路口,当南北方向的信号灯变绿时,南北方向的车辆可以通行而东西方向的车辆必须等待,反之亦然。

操作系统中一个很好的例子是使用信号量控制打印机的使用,假定一个机器上只用一台打印机,有一个信号量控制对这个打印机的使用。如果一个程序A要实用这台打印机,而该信号量未被占用,程序A占用信号量然后开始打印,当程序A的打印未结束时,程序B要求使用打印机,程序B则等待程序A释放信号量后才能使用打印机。

使用特权

评论回复
8
jack.king|  楼主 | 2008-6-29 00:49 | 只看该作者

谢谢!我看了说明也知道!就是具体在应用怎么来用就不知道了

使用特权

评论回复
9
soso| | 2008-6-29 08:01 | 只看该作者

7楼,你说的是互斥信号量

  请先翻阅有关资料。
  可以这样说,计数式信号量,并不关心信号灯被谁拿走,一个任务发出一次信号,计数器就加1,如果有2个任务都需要这个信号,A任务比B任务优先级高,假如B任务得到信号令牌之后A才申请,随后A也得到了信号灯,那么A就会优先执行,B被抢占,直到A弃权。具体应用实例:键盘任务周期性检测键盘,发现有效键值就发出信号令牌一次,B任务得到信号令牌就运行,而B的运行打开A对B的紧急状态的监控,操作者发现需要紧急停车,任何对键盘的操作都可以让B任务被抢占而暂停。

使用特权

评论回复
10
平常人| | 2008-6-29 10:31 | 只看该作者

9楼说的好,但你的官印说并不是这个意思

所谓官印是某官员长期占有,是一种特权;而信号量是始终附属于资源的,不是附属于进程或任务。

信号量有2种,一种是单值信号量,另一种是多值信号量;那个控制打印机的信号量就是单值信号量,那个控制交通的信号灯可以理解为多值信号量。

对你的A、B任务的例子不太明白,但我有另一个关于优先级的例子:假定有一个电话间只有一把钥匙,由管理员保管,B任务要打电话时到管理员处取得钥匙开始打电话,B任务正在打电话时如果A任务有紧急事情要使用电话,A需要到管理员那里申请,管理员验明正身后出面把B请出电话间并要回钥匙,然后管理员把钥匙交给A,A开始打电话,同时B在管理员处等候直到A返还钥匙(当然B也可以选择离开)。

这个例子中钥匙就是控制电话间的信号量,只有得到钥匙的任务才能使用资源,否则必须等候;管理员相当于操作系统中管理信号量的管理程序,A、B任务的优先级也是由管理员安排;当B在打电话时绝对不允许A冲进电话间把B赶出来的,所有人所有任务都必须遵守这个规则。

使用特权

评论回复
11
chunk| | 2008-6-30 09:46 | 只看该作者

解释了半天有什么用呢?

LZ写的程序永远都只有一个任务,连中断都不开。他没有多个任务分工合作解决一个问题的思路。

OS大牛们给编写一个“俄罗斯方块”游戏吧:一个TASK负责绘图,它根据方块下落的速度决定使用什么样的时间间隔作为参数调用“TaskDelay”函数;一个TASK负责游戏手柄,这个任务平时总是挂起的,当手柄有操作时CPU会收到“中断”,中断服务程序会调度起这个任务;一个TASK负责音乐,它靠时钟中断调度。我们面临的问题是:手柄TASK和绘图TASK之间要协调,因为手柄上“箭头”按下后方块要按箭头指向移动。音乐必须连贯,不能因为手柄上有键按下就小小的中断一下,出现一声杂音。

啥?你用LINUX只是为了使用它的网络部分,也没使过多任务?那你知道SOCKET和那什么信号量之间有什么联系吗?

使用特权

评论回复
12
dld2| | 2008-6-30 10:12 | 只看该作者

to 11f

关于俄罗斯方块的想法:

协调:
绘图task不要直接用taskdelay,使用消息队列。由定时器任务给它发送定时到达消息。
同样,手柄任务也向绘图task发送消息。

音乐:
最高优先级任务。
中断处理时间尽量简短,内部不能有延时。
如果还不行,可能要把音乐任务放在中断里。

使用特权

评论回复
13
jack.king|  楼主 | 2008-6-30 13:50 | 只看该作者

来一个实际问题说说

若要实现有io口输出
   有7数码管显示,还有led不同形式的显示(例如有些长亮有些在一定时间里面去闪烁)还有键盘扫描,不通的键有不同的io口输出,有不同led显示,
   若要在ucos里面建立认为一般要建立多少个呢?

使用特权

评论回复
14
dld2| | 2008-6-30 13:59 | 只看该作者

re楼上

三个。

按键处理任务。
IO输出任务。
LED显示任务。

根据复杂度和硬件的实际情况,可增减。

使用特权

评论回复
15
后学| | 2008-6-30 15:52 | 只看该作者

semaphore和signal不一样的,

关于信号量和消息队列,平时说的比较多的,
邮箱这东西没见过,

查查进程间通信的资料吧。。。

使用特权

评论回复
16
soso| | 2008-6-30 16:21 | 只看该作者

我喜欢的一种邮箱用法

  在有LCD与键盘的人机界面中,我喜欢把LCD显示或者程序分成N多的功能模块,通过响应键盘命令来决定LCD显示的页面入口和程序要执行的功能走向。换一句话说:邮箱传递函数指针给任务。

使用特权

评论回复
17
jack.king|  楼主 | 2008-7-2 13:52 | 只看该作者

近来把书仔细的看了下!我想问下在实际应用中主要用在那里

使用特权

评论回复
18
lomeisi_99| | 2008-7-4 15:03 | 只看该作者

都是高手啊

建议建个UCOS的群,共同研究下。

使用特权

评论回复
19
huangbingg| | 2008-7-11 15:37 | 只看该作者

俺还在读书,下次要用到~~

哈哈,到时请教各位大哥啊~~

使用特权

评论回复
20
物联网时代| | 2016-11-18 08:23 | 只看该作者
感觉好受启发。希望能常见到这类问题被大神们解释解决。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

488

主题

2158

帖子

1

粉丝