立即注册
查看: 3453|回复: 4

UCOSIII信号量和互斥

发表于 2016-3-28 10:24:53 | 显示全部楼层 |阅读模式 来自 广东省深圳市罗湖区
1、UCOSIII信号量
1.1、信号量简介:
信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被锁部分代码的钥匙被再次释放才能继续执行。
       信号量用于控制对共享资源的保护,但是现在基本用来做任务同步用。
要想获取资源的任务必须执行“等待”操作,如果该资源对应的信号量有效值大于1,则任务可以获得该资源,任务继续运行。如果该信号量的有效值为0,则任务加入等待信号量的任务表中。如果等待时间超过某一个设定值,该信号量仍然没有被释放掉,则等待信量的任务就进入就绪态,如果将等待时间设置为0的话任务就将一直等待该信号量
信号量通常分为两种:二进制信号量和计数型信号量。
       二进制信号量只能取0和1两个值,计数型信号量的信号量值大于1,计数型信号量的范围由OS_SEM_CTR决定,OS_SEM_CTR可以为8位,16位和32位,取值范围分别为:0~255,0~65535和0~4294967295。
        二值信号量用于那些一次只能一个任务使用的资源,比如I/O设备,打印机计,数型信号量用于某些资源可以同时被几个任务所使用,比如一个缓存池有10个缓存块,那么同时最多可以支持10个任务来使用内存池
1.2、信号量API函数:
函数名 作用
OSSEMCREATE() 建立一个信号量
OSSemDEL()
删除一个信号量
OSSemPend() 等待一个信号量
OSSemPengAborot() 取消等待
OSSemPost() 释放或者发出一个信号量
OSSemSet() 强制设置一个信号量的值
2、UCOSIII互斥信号量
2.1、优先级反转:
优先级反转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。

W44OB1G9VD3`[XZ]UNO[JBY.png


想了解更多请下载附件:
游客,如果您要查看本帖隐藏内容请回复


已绑定手机
发表于 2019-2-11 17:17:52 | 显示全部楼层 来自 陕西省西安市
看看是什么
已绑定手机
发表于 2020-11-2 17:38:23 | 显示全部楼层 来自 吉林省延边州延吉市
谢谢, 好看文件。。。。。。。
已绑定手机
发表于 2021-7-27 16:19:42 | 显示全部楼层 来自 上海市浦东新区
学习学习,谢谢分享。
已绑定手机
发表于 2021-10-18 19:56:53 | 显示全部楼层 来自 上海市
的给我让我给人工
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表