电子与信息技术专业.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子与信息技术专业 积件 12-9:μCOS-II信号量 简介 ISR与任务同步 信号量的工作方式 1 2 3 任务间同步 在中断中获得信号量 资源同步 4 5 6 积件 12-9:μCOS-II信号量 简介 信号量值大于0 调用OSSemPost() 信号量 信号量值加1 在实时多任务系统中,信号量被广泛用于:任务间对共享资源的互斥、任务和中断服务程序之间的同步、任务之间的同步。 信号量值减1 调用OSSemPend() 信号量 当任务调用OSSemPost()函数发送信号量时; 当信号量值大于0,任务调用OSSemPend()函数接收信号量时; 积件 12-9:μCOS-II信号量 信号量值等于0 延时等待信号量 注意:μC/OS-II不允许在中断服务程序中等待信号量。 信号量 信号量到来,正常返回 信号量值等于0 延时等待信号量 延时到,无信号量,返回超时错误 调用OSSemPend() 调用OSSemPend() 当信号量值等于0,任务调用OSSemPend()函数接收信号量时。 简介 积件 12-9:μCOS-II信号量 前面章节我们学习了互斥信号量,下面对计数信号量与互斥信号量做一个对比。 取值 能否用于资源同步以实现对共享资源的独占 能否解决优先级反转问题 能否实现任务间以及中断与任务间的同步 实现同步时能否传递数据 互斥信号量 0或1 能 能 不能 不能 计数信号量 0~65535 能 不能 能 不能 简介 积件 12-9:μCOS-II信号量 信号量的工作方式 在实际的应用中,常用信号量实现任务间的同步,OSSemPend()和OSSemPost()会出现在不同任务的不同函数中,但不一定成对出现。 1.任务间同步 注意:在实际的应用中,还有多对多、一对多信号量操作的情况,但很不常见,建议读者不要设计出这样的操作方式,因为这样会带来很多的麻烦。 任务3 中断1 任务2 任务1 任务2 任务1 信号量1 信号量 信号量 信号量 信号量 信号量1 信号量 信号量 一对一同步 多对一同步 积件 12-9:μCOS-II信号量 在嵌入式系统中,经常使用信号量访问共享资源来实现资源同步。在使用时,注意发送信号量函数OSSemPost()与等待信号量函数OSSemPend()必须成对出现在同一个任务调用的函数中,才能实现资源同步。 2.资源同步 信号量的工作方式 积件 12-9:μCOS-II信号量 ISR与任务同步 下面以示例来说明如何现实ISR与任务间同步。假设定时器1中断服务程序发送信号量,任务完成了信号量的创建并在接收到信号量后让蜂鸣器响一声。处理流程如下。 积件 12-9:μCOS-II信号量 void Timer1_Exception (void) { T1IR = 0x01; VICVectAddr = 0; OSSemPost (sem); } 更新中断优先级 清除中断标志 发送信号量 中断服务程序ISR示例代码如下。 ISR与任务同步 积件 12-9:μCOS-II信号量 void TaskBeep (void *pdata) { …… sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定时器1(省略) */ /* 目标板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) { OSSemPend(sem, 0, err); IO0CLR = BEEP; OSTimeDly(60); IO0SET = BEEP; OSTimeDly(60); } } 创建信号量 初始化工作 蜂鸣器响 延时60个节拍 蜂鸣器灭 延时60个节拍 进入临界段 退出临界段 等待信号量 读者补出相应的代码 蜂鸣器报警任务示例代码如下。 ISR与任务同步 积件 12-9:μCOS-II信号量 发送信号量 信号量 任务间同步 收到信号量 . . . . . 等待信号量 . . . . . 任务1 任务2 任务优先级足够高 任务同步 在嵌入式系统中,经常使用信号量来实现多个任务之间的同步。而用来实现任务间同步的信号量在创建时初始值可以

文档评论(0)

有志者事竟成 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7114163151000053

1亿VIP精品文档

相关文档