搜索
bottom↓
回复: 6

uC/OS--II 计数型信号量(sampaphore)使用疑惑

[复制链接]

出0入0汤圆

发表于 2013-8-19 20:25:55 | 显示全部楼层 |阅读模式
uC/OS-II为了实现任务与任务、中断与任务之间的同步/通信,使用了计数型信号量、互斥型信号量、消息邮箱、消息队列。
其中,互斥型信号量可以用了标志共享资源当前是否已经被占用,例有多个任务申请串口打印时
         消息邮箱可以在任务与任务、中断与任务之间传递一个数据(数据可以是一个数组、一个结构体..........),例如在任务A中处理完数据,然后发送给任务B接着做后续处理
         消息队列可以在任务与任务、中断与任务之间传递多个数据(数据可以是一个数组、一个结构体..........),例同上。
         那什么情况下使用计数型信号量呢?
看某些书上对计数型信号量的使用情况解释为:假设一个大的电话亭,里面有多部电话,那么这个电话亭就允许在同一时刻有多人使用。因此在电话亭门口的指示牌上指示当前剩余的可用电话的数量。那么在嵌入式编程中这个类似“具有多部电话的电话亭”又是什么样的资源呢??
         
          先行谢过!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-8-19 20:45:02 | 显示全部楼层
顺便坐个沙发

出0入0汤圆

发表于 2013-8-19 20:48:58 | 显示全部楼层
信号量可以用于任务同步,互斥。

出0入0汤圆

 楼主| 发表于 2013-8-19 20:52:23 | 显示全部楼层
ljt80158015 发表于 2013-8-19 20:48
信号量可以用于任务同步,互斥。

鄙人刚接触uC/OS不久,真心没理解。能否举个例子呢?

出0入0汤圆

发表于 2013-8-20 11:03:22 | 显示全部楼层
uCOS是下面这样的:
OSSemCreate(0)  :这种情况下可以用任务的同步。
OSSemCreate(1)  : 二值信号量,可用于一个资源的使用
OSSemCreate(>1):这种情况表示有>1个资源可以使用。

RTX:
和uCOS类似,通过初始化计数值来同时实现同步,二值信号量(和互斥信号量的不同就是优先级翻转不支持),和多资源的管理

FreeRTOS:
除了有和RTX,uCOS一样的计数信号量以外,还专门加了一个二值信号量vSemaphoreCreateBinary,其实有些多余,不过执行速度比用
计数信号量来实现二值信号量要快些

embOS:
也是单独做了一个二值信号量,这里他们的手册将他叫做资源信号量。OS_Use() 和OS_Unuse() 。

出0入0汤圆

发表于 2013-8-23 22:19:38 | 显示全部楼层
UCOS为了让邮箱或者队列可以部分代替计数信号量,所以队列邮箱都有多个任务等待一个消息的做法,消息来了的话就从等待列表中找到最高优先级的任务,将他恢复,感觉比较累赘。

计数信号量用在行为同步的时候,创建信号量的时候信号量值为0,任务pend这个信号量,直到有任务或者ISR post这个信号量后,这个任务才恢复到就绪表中,一个任务(ISR)将等待信号的任务就绪了这就是行为同步。
用到资源同步的话就是,先判断这个资源(比如串口)同一时间可以被多少个任务使用,一般情况下只有1个任务,设定信号量值为1,然后先pend到这个信号量的就获得资源使用权,别的任务再pend这个资源的话就
会被挂起,直到资源所有者释放了这个资源,可能会有优先级反转的问题。

根据周航慈的书中的说法,在多实体的资源上,允许多个任务同时使用这个资源,可以使用计数信号量管理,但是在嵌入式里每个同类实体的硬件连接往往不同,相互之间并不能替代,比如单片机的多个串口虽然都是串口
但是硬件连接的目标往往并不一样,不能互换,也就不能用计数信号量管理了。
他还说到:“在嵌入式系统中完全平等的多实体共享资源基本上只有内存块了,而实时操作系统已经把内存块管理起来了,只要调用相关的内存动态管理函数即可。”
所以基本上只是用来做行为同步的吧

出0入0汤圆

 楼主| 发表于 2013-8-24 10:44:45 | 显示全部楼层
chencc8 发表于 2013-8-23 22:19
UCOS为了让邮箱或者队列可以部分代替计数信号量,所以队列邮箱都有多个任务等待一个消息的做法,消息来了的 ...

后来在网上看到有人推荐他的那本书  看到计数型信号量的那章 顿时笑了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表