第7章任务的同步与通讯之信号量.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章任务的同步与通讯之信号量资料

优先级继承协议基本思想 当一个任务阻塞了一个或多个高优先级任务时,该任务将不使用其原来的优先级,而使用被该任务所阻塞的所有任务的最高优先级作为其执行临界区的优先级。 当该任务退出临界区时,又恢复到其最初的优先级。 优先级反转解决办法 优先级继承协议 (priority inheritance protocol) 优先级天花板协议 (priority ceiling protocol) 优先级天花板协议 每个信号量有个优先级天花板,为所有使用该信号量的任务的最高优先级。 在优先级天花板协议中,如果任务获得信号量,则在任务执行临界区的过程中,任务的优先级将被抬升到所获得信号量的优先级天花板。 μC/OS-II采用这种 μC/OS-II的互斥型信号量数据结构 由3个元素组成: 1个标志,指示mutex是否可以使用(0或1) 1个优先级,天花板 1个等待该mutex的任务列表 0xFF信号量表示可用 互斥型信号量的操作 OSMutexCreat() OSMutexDel() OSMutexPend() , OSMutexPost() , OSMutexAccept() , OSMutexQuery() 建立一个互斥型信号量,OSMutexCreat() 函数OSMutexCreat()的原型如下: OS_EVENT *OSMutexCreat(INT8U prio,INT8U *err); 参数: prio: 优先级天花板(PIP)。 err:指向其出错代码的指针: OS_NO_ERR,调用成功,mutex已被成功地建立。 OS_ERR_CREAT_ISR,试图在中断服务子程序中建立mutex。 OS_PRIO_EXIST,优先级为PIP的任务已经建立。 OS_ERR_PEVENT_NULL,已经没有OS_ENENT结构可以使用的了。 OS_PRIO_INVALID,定义的优先级非法,其值大于OS_LOWEST_PRIO 返回值: 返回一个指针,该指针指向分配给mutex的事件控制块。如果得不到事件控制块,则返回一个空指针。 互斥型信号量的操作 OSMutexCreat() OSMutexDel() OSMutexPend() , OSMutexPost() , OSMutexAccept() , OSMutexQuery() 删除一个互斥型信号量,OSMutexDel() OSMutexDel()的原型如下: OS_EVENT *OSMutexDel(OS_EVENT *pevent, INT8U opt, INT8U *err); 参数: prevent:指向mutex的指针。 opt: 该选项定义mutex的删除条件。可以选择只能在已经没有任何任务在等待该mutex时,才能删除(OS_DEL_NO_PEND);或者,不管有没有任务在等待这个mutex,立即删除(OS_DEL_NO_ALWAYS),在这种情况下,所有等待mutex的任务都立即进入就绪态。 err:指向其出错代码的指针。出错代码为以下值之一: OS_NO_ERR,调用成功,mutex已被删除。 OS_ERR_DEL_ISR,试图在中断服务子程序中删除mutex。 OS_ERR_INVALID_OPT,定义的opt参数无效,不是上面提到的2个参数之一。 OS_ERR_TASK_WAITING,定义了OS_DEL_NO_PEND,而有一个或一个以上的任务在等这个mutex。 OS_ERR_EVENT_TYPE,pevent不是指向mutex的指针。 OS_ERR_PEVENT_NULL,已经没有可以使用的OS_EVENT数据结构了。 返回值: 如果mutex已经删除,则返回空指针;如果mutex没能删除,则返回pevent 互斥型信号量的操作 OSMutexCreat() OSMutexDel() OSMutexPend() , OSMutexPost() , OSMutexAccept() , OSMutexQuery() 等待一个互斥型信号量,OSMutexPend() 函数OSMutexPend()的原型如下: void OSMutexPend(OS_EVENT *pevent,INT16U timeout,INT8U *err); 参数: prevent:指向mutex的指针。 timeout:以时钟节拍数目定义的等待超时时限。如果在这一时限中得不到mutex,任务将恢复执行。Timeout的值为0,表示将无限期地等待mutex。Timeout的最大值是65535个时钟节拍。 如果mutex被优先级较低的任务占用了,那么OSMutexPend()会将占用mutex的任务的优先级提升到优先级天花板。 e

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档