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

嵌入式系统(北航2006年详细的授课PPT教案)Chap8.ppt

嵌入式系统(北航2006年详细的授课PPT教案)Chap8.ppt

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

* 事件控制块ECB 程序4.5 ECB的结构如下 --------------------------------------------------------------------- typedef struct { void *OSEventPtr; /*指向消息或消息队列的指针*/ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /*等待任务列表*/ INT16U OSEventCnt; /*计数器(当事件是信号量时)*/ INT8U OSEventType; /*事件类型:信号量、邮箱等*/ INT8U OSEventGrp; /*等待任务组*/ } OS_EVENT; 与TCB类似的结构,使用两个链表,空闲链表与使用链表 所有的通信信号都被看成是事件(event), 一个称为事件控制块(ECB, Event Control Block)的数据结构来表征每一个具体事件,ECB的结构如下 * 事件的等待任务列表 * 空闲事件控制块链表 * 事件控制块TCB的操作 对事件控制块进行的操作包括: 初始化一个事件控制块OS_EventWaitListInit(); 使一个任务进入就绪态OS_EventTaskRdy(); 使一个任务进入等待某事件的状态OS_EventTaskWait(); 因为等待超时而使一个任务进入就绪态OS_EventTO()。 * 信号量semaphore 信号量在多任务系统中用于:控制共享资源的使用权、标志事件的发生、使两个任务的行为同步。 uC/OS中信号量由两部分组成:信号量的计数值和等待该信号任务的等待任务表。信号量的计数值可以为二进制, 也可以是其他整数。 系统通过OSSemPend( )和OSSemPost( )来支持信号量的两种原子操作P()和V()。P()操作减少信号量的值,如果新的信号量的值不大于0,则操作阻塞;V()操作增加信号量的值。 * 任务、中断服务子程序和信号量之间的关系 OSSemDel() * 信号量操作 μC/OS-II提供了6个对信号量进行操作的函数。它们是: OSSemCreate():建立一个信号量 OSSemDel(): 删除一个信号量 OSSemPend():等待一个信号量 OSSemPost():发出一个信号量 OSSemAccept():无等待地请求一个信号量 当一个任务请求一个信号量时,如果该信号量暂时无效,也可以让该任务简单地返回,而不是进入睡眠等待状态 OSSemQuery()函数:查询一个信号量的当前状态 * 邮 箱 邮箱是μC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。 该指针指向一个包含了特定“消息”的数据结构。为了在μC/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。 使用邮箱之前,必须先建立该邮箱。该操作可以通过调用OSMboxCreate()函数来完成,并且要指定指针的初始值。 * 邮 箱 μC/OS-II提供了7种对邮箱的操作: OSMboxCreate():建立一个邮箱 OSMboxDel():删除一个邮箱 OSMboxPend():等待邮箱中的消息 OSMboxPost():向邮箱发送一则消息 OSMboxPostOpt():向邮箱发送一则消息 OSMboxAccept():无等待地从邮箱中得到一则消息 OSMboxQuery():查询一个邮箱的状态 * 任务、中断服务子程序和邮箱之间的关系 * 消息队列 消息队列是μC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量 因具体的应用有所不同,每个指针指向的数据结构变量也有所不同 为了使用μC/OS-II的消息队列功能,需要在OS_CFG.H 文件中,将OS_Q_EN常数设置为1,并且通过常数OS_MAX_QS来决定μC/OS-II支持的最多消息队列数 在使用一个消息队列之前,必须先建立该消息队列。这可以通过调用OSQCreate()函数,并定义消息队列中的单元数(消息数)来完成 * μC/OS-II提供了8个对消息队列进行操作的函数: OSQCreate():建立一个消息队列 OSQDel():删除一个消息队列 OSQPend():等待消息队列中的消息 OSQPost():向消息队列发送一则消息(FIFO) OSQPostFront

文档评论(0)

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

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

1亿VIP精品文档

相关文档