- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
S.D.Lu 的 uC/OS II 入门学习笔记 (6) :互斥信号量
在该系列笔记前面篇章中, 我刻意跳过了互斥信号量的介绍, 是有原因的。 该系列笔记面向
的是初学者, 信号量通信是学习者初次接触任务同步的相关内容, 后面还有消息邮箱和消息
队列。因为互斥信号量的内容还会涉及到优先级反转的内容, 对初学者来说相对复杂。 所以,
先学习完消息邮箱和消息队列的基本应用之后,再回过头学习互斥信号量的内容会比较好。
本篇实验将在第 (3)篇的基础上进行,仍然是运行两个任务,每个任务控制一个 LED 的
亮灭。
问题的提出
在可剥夺型内核中, 当任务以独占式使用共享资源时, 会出现低优先级任务先于高优先级任
务被运行的现象,这就是任务优先级反转。一般来说,在实时系统中不允许出现这种现象,
因为它破坏了任务执行的预期顺序,可能要导致严重后果。
关于这个现象的详细描述,请仔细阅读任哲《嵌入式实时操作系统μ COS-II 原理及应
用》 (第 2 版 )第五章 5.4.1 节。其中例子基本描述是这样的,有 A 、B 、 C 三个任务,它们
的优先级别 ABC ,而且 A 和 C 共享一个独占式资源 S。当 C 占用该资源时,如果此时 A
申请访问资源 S,那么 A 由于等待资源 S 而得不到运行。这样,任务 B 就可能超越任务 A
优先得到运行。任务 C 占用资源的时间越长, A 就会被阻塞越久。
解决问题的办法之一是, 使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有
任务最高优先级的高一个级别上, 以使该任务不被其他任务所打断, 从而能尽快地使用完共
享资源并释放信号量,然后再回复该任务原来的优先级别。
引入互斥型信号量,就是为了解决上述问题的。
在上一篇 例 3-2 的基础上进行修改。
例 6-1 将 app.c 中的内容改为如下:
编译下载,运行程序,结果和例 3-2 相同, LED2 闪烁 2 次后 LED1 闪烁 1 次,如此循
环,而且两路 LED 不会同时被点亮 ( 刚开始上电的时候有可能同时被点亮,取决于初始化函
数) 。需要注意的是,本例中用到了互斥信号量及相关函数等,所以在 os_cfg.h 配置文件中
必须将 OS_MUTEX_EN 置 1,如下图:
几个相关的函数原型如下:
本例非常简单, 而且并没有体现互斥信号量的作用。 优先级反转现象不可能出现在只有
两个任务的系统中。 本例展示的只是,如何定义互斥信号量, 以及互斥信号量的申请、 发送
的操作。它的操作和一般信号量非常相似。
那么,在什么情况下使用互斥型信号量呢?
1. 用户任务数超过 2 个;
2. 两个共享同一资源的任务的优先级不连续。
总的来说,在有可能出现优先级反转的情况下,使用互斥型信号量。
深入了解互斥型信号量的相关知识,请参考任哲《嵌入式实时操作系统μ COS-II 原理
及应用》 (第 2 版 )第五章 5.4 节的相关内容。
作者: S.D.Lu
深圳
2014-6-12
原创力文档


文档评论(0)