uCOS-II信号量集.pptVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uCOS-II信号量集,ucosii信号量,ucosii互斥信号量,信号量集ucos,ucos信号量,ucos互斥信号量,ucos中断发送信号量,ucos信号量消抖,ucosiii信号量,ucos信号量can

添加一个任务到事件标志组等待任务链表中OS_FlagBlock() 信号量集的操作 创建一个事件标志组OSFlagCreate() 接收(等待)事件标志组的事件标志位OSFlagPend() 无等待请求信号量集 信号量级的其他操作函数 * * 信号量集 在嵌入式实时内核中,信号量是指一种表明预先定义的系统事件已经发生的机制。信号量机制用于任务与任务之间、任务与ISR之间的同步。其主要的特点是可实现一对多的同步。 一个信号量就是一个标志,不具备其它信息。 一个或多个信号量构成一个信号量集。信号量集可以用一个指定长度的变量(比如一个32位的无符号整型变量,不同的操作系统其具体实现不一样)来表示,而每个信号量由在信号量集变量中的某一位来代表。 信号量及信号量集有以下特点: 1、信号量间相互独立 2、信号量仅用于同步,不提供数据传输功能 3、信号量无队列,即多次发送同一信号量,在未经过任何处理的情况下,其效果等同于只发送一次。 提供信号量集机制的意义在于: 1、当某任务要与多个任务或中断服务同步时,就需要使用信号量集机制。 2、若任务需要与一组事件中的任意一个发生同步,可称为独立型同步(逻辑“或”关系)。 3、任务也可以等待若干事件都发生时才同步,称为关联型同步(逻辑“与”关系)。 信号量集的标志组 不同于信号量、消息邮箱、消息队列等事件,μC/OS-II不使用事件控制块来描述信号量集,而使用了一个叫做标志组的结构OS_FLAG_GRP。 OS_FLAG_GRP结构如下: ? typedef struct{ INT8U OSFlagType; //识别是否为信号量集的标志 void *OSFlagWaitList;//指向等待任务链表的指针 OS_FLAGS OSFlagFlags; //所有信号列表 }OS_FLAG_GRP; 成员OSFlagWaitList是一个指针,当一个信号量集被创建后,这个指针指向了这个信号量集的等待任务链表。 等待任务链表 与其他前面介绍过的事件不同,信号量集用一个双向链表来组织等待任务,每一个等待任务都是该链表中的一个节点(Node)。标志组OS_FLAG_GRP的成员OSFlagWaitList就指向了信号量集的这个等待任务链表。 等待任务链表节点OS_FLAG_NODE的结构如下: ? typedef struct { void *OSFlagNodeNext; //指向下一个节点的指针 void *OSFlagNodePrev; //指向前一个节点的指针 void *OSFlagNodeTCB; //指向对应任务控制块的指针 void *OSFlagNodeFlagGrp; //反向指向信号量集的指针 OS_FLAGS OSFlagNodeFlags; //信号过滤器 INT8U OSFlagNodeWaitType;//定义逻辑运算关系的数据 } OS_FLAG_NODE; 事件标志组、事件标志节点及任务控制块之间的关系 给等待任务链表添加节点的函数为OS_FlagBlock( ),这个函数的原型为: ? static void OS_FlagBlock ( OS_FLAG_GRP *pgrp, //信号量集指针 OS_FLAG_NODE *pnode, //待添加的等待任务节点指针 OS_FLAGS flags, //指定等待信号的数据 INT8U wait_type, //信号与等待任务之间的逻辑 INT16U timeout //等待时限 ); ? 这个函数将在请求信号量集函数OSFlagPend ( )中被调用。 ? 从等待任务链表中删除一个节点的函数为OS_FlagUnlink( ),这个函数的原型为: ? void OS_FlagUnlink (OS_FLAG_NODE *pnode); ? 这个函数将在发送信号量集函数OSFlagPost( )中被调用。 信号量集的操作 任务可以通过调用函数OSFlagCreate ( )来创建一个信号量集。OSFlagCreate ( )的函数原型为: ? OS_FLAG_GRP *OSFlagCreate ( OS_FLAGS flags, //信号的初始值 INT8U *err //错误信息 ); OS_FLAG_GRP *OSFlagCreate(OS_FLAGS flags, INT8U *err) { OS_FLAG_GRP *pgrp; pgrp=OSFlagFreeList;//获取一个空闲事件标志组结构 if(pgrp!=(OS_FLAG_GRP *

文档评论(0)

mydoc + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档