- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
添加一个任务到事件标志组等待任务链表中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 *
您可能关注的文档
- ST MCU 最新选型手册_201408.pdf
- stm32f407开发板资料手册uCOS-II原理1.ppt
- stm32f407开发板资料手册UCOSIII 思维导图.pdf
- stm32f407开发板资料手册ucOS-II入门教程(任哲).ppt
- stm32f407开发板资料手册STM32F4 UCOS开发手册.pdf
- stm32f407开发板资料手册STM32 UCOS移植.pdf
- SLAA116stm32f407开发板资料手册.pdf
- SPEC0.0stm32f407开发板资料手册.pdf
- stm32f407开发板资料手册STM32F4_高性能_DSC.pdf
- stm32f407开发板资料手册uCOS-II原理2.ppt
- STM32F4开发指南-库函数版本_V1.1stm32f407开发板资料手册.pdf
- OUTLINEstm32f407开发板资料手册.pdf
- OV2640stm32f407开发板资料手册.pdf
- OTT2001A IIC协议指导stm32f407开发板资料手册.pdf
- NT35510_AN_for_CMI_4p02_IPSstm32f407开发板资料手册.pdf
- MP3302_r0.98stm32f407开发板资料手册.pdf
- MDK5.11a安装手册stm32f407开发板资料手册.pdf
- Nintendo Entertainment System Documentation Version 1.0stm32f407开发板资料手册.pdf
- INITIALIZATION CODEstm32f407开发板资料手册.pdf
文档评论(0)