网站大量收购闲置独家精品文档,联系QQ:2885784924

8.国内着名的嵌入式实时操作系统-青岛科技大学信息科学技术学院.ppt

8.国内着名的嵌入式实时操作系统-青岛科技大学信息科学技术学院.ppt

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

  (3) OS_EventTaskWait():使一个任务进入等待某事件发生状态。当某个任务需要等待一个事件的发生时,通过调用函数OS_EventTaskWait(),将当前任务从就绪任务表中删除,并放到相应事件的事件控制块ECB的等待任务列表中。   (4) OS_EventTO():由于等待超时而将任务置为就绪态。如果在预先指定的时限内任务等待的事件没有发生,则通过调用OS_EventTO(),可以将等待超时的任务的状态置为就绪态。该函数负责从事件控制块中的等待任务列表中将任务删除,并把它置为就绪态,然后从任务控制块中将指向事件控制块的指针删除。     2.信号量管理   使用信号量可以在任务间传递信息,实现任务与任务或中断服务子程序的同步。μC/OS-Ⅱ中的信号量由两部分组成:一部分是16位的无符号整型信号量的计数值(0~65 535);另一部分是由等待该信号量的任务组成的等待任务列表。μC/OS-Ⅱ提供了以下6个函数对信号量进行操作:   (1) OSSemCreat():建立一个信号量。在使用一个信号量之前,首先必须建立该信号量。可以调用函数OSSemCreat()来建立信号量,并对信号量赋予一个取值范围在0~65 535的初始计数值。如果信号量用来表示一个或者多个事件发生,则该信号量的初始值通常赋为0;如果信号量用来对共享资源进行访问,则该信号量的初始值应赋为1;如果信号量用来表示允许任务访问n个相同的资源,则该信号量的初始值应赋为n,并把该信号量作为一个可计数的信号量使用。   (2) OSSemDel():删除一个信号量。函数OSSemDel()用来删除一个信号量。需要注意的是,在删除一个信号量时,必须首先删除使用该信号量的所有任务。     (3) OSSemPend():等待一个信号量。通过调用函数OSSemPend()可以实现等待一个信号量,并对信号量进行减1操作。如果信号量是有效的(即信号量的计数值非0),则信号量的计数值递减,函数OSSemPend()将“无错”代码(OS_NO_ERR)返回给它的调用函数;如果信号量无效(计数值为0),且调用它的函数不是中断服务子程序,则调用OSSemPend()函数的任务进入挂起态,等待另一个任务(或中断服务子程序)发出该信号量。   (4) OSSemPost():发送一个信号量。函数OSSemPost()用于发送一个信号量,并对信号量进行加1操作。   (5) OSSemAccept():无等待地请求一个信号量。函数OSSemAccept()完成的功能是:当一个任务请求一个信号量时,如果该信号量暂时无效,则让该任务简单地返回,而不是进入睡眠状态。   (6) OSSemQuery():查询一个信号量的当前状态。在应用程序中,可以调用函数OSSemQuery()来随时查询一个信号量的当前状态。在调用该函数前,必须先定义一个指向数据结构OS_SEM_DATA的指针pdata,用该指针来存储信号量的有关信息。   3.消息邮箱管理   消息邮箱(简称邮箱)是μC/OS-Ⅱ中的一种通信机制。在使用消息邮箱时,通常先定义一个指针型的变量,该指针指向一个包含了消息内容的特定数据结构。发送消息的任务或中断服务子程序把这个指针型的变量送往邮箱,接收消息的任务从邮箱中取出该指针变量,从而实现任务间或中断服务子程序与任务间的信息交换。μC/OS-Ⅱ提供6种对消息邮箱的操作,它们通过以下函数实现:   (1) OSMboxCreate():建立一个邮箱。使用邮箱之前,必须先建立邮箱。通过调用函数OSMboxCreate()可以创建一个邮箱,并且指定其初始值。这个初始值一般是NULL,但也可以使其在最开始就包含一条消息。如果使用邮箱的目的是为了通知一个事件的发生(即只发送一条消息),则要初始化该邮箱为空(即NULL),因为在开始时事件很有可能还没发生;如果用邮箱共享某些资源,则要初始化该邮箱为一个非空的指针,在这种情况下,邮箱被当成一个二值信号量使用。   (2) OSMboxDel():删除一个邮箱。函数OSMboxDel()用来删除一个邮箱。使用该函数时要特别注意,多个任务可能还在试图操作已经删除的邮箱。因此,在删除邮箱之前,必须首先删除可能操作该邮箱的所有任务。   (3) OSMboxPend():等待邮箱中的消息。通过调用可以实现等待一则消息发送到邮箱中的功能。如果邮箱中有消息(非NULL指针),则从该邮箱中取出该消息,返回给调用该函数的任务,并将NULL指针存入邮箱中;如果邮箱为空,则调用该函数的任务进入挂起态,等待另一个任务(或中断服务子程序)通过邮箱发送消息或者等待超时。   (4) OSMboxPost():向邮箱发送一则消息。

文档评论(0)

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

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

1亿VIP精品文档

相关文档