第7章 μCOS-Ⅱ标准教程 教案(μCOS-II多事件同步机制)
时间:2025-07-09
时间:2025-07-09
μCOS-II
µC/OS-II 操作系统标准教程
µC/OS-II 操作系统标准教程
人民邮电出版社 出版 杨宗德,张兵 编著 2009年3月
μCOS-II
µC/OS-II 操作系统标准教程
第7章 µC/OS-II多事件同步机制1事件组标志同步机制基本原理
2
事件组标志基本操作
μCOS-II
µC/OS-II 操作系统标准教程
事件组标志管理示意图
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
事件组标志控制块结构体os_flag_grp
typedef struct os_flag_grp { //事件组标志结构体 INT8U OSFlagType; //事件类型,使用时需设置为OS_EVENT_TYPE_FLAG void *OSFlagWaitList; //指向等待的任务链表 OS_FLAGS OSFlagFlags; //8, 16 or 32 bit flags,信号列表 #if OS_FLAG_NAME_SIZE > 1 INT8U OSFlagName[OS_FLAG_NAME_SIZE]; //信号名称 #endif } OS_FLAG_GRP;
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
等待任务链表中结点typedef struct os_flag_node { //事件标志等待链表结点 void *OSFlagNodeNext; //指向下一个等待结点 void *OSFlagNodePrev; //指向前一个等待结点 void *OSFlagNodeTCB; //指向此等待任务的任务控制块 void *OSFlagNodeFlagGrp; //指向此任务其所等待的事件组标志 OS_FLAGS OSFlagNodeFlags; //等待的事件(标识等待此标志组中哪些事件) INT8U OSFlagNodeWaitType; //等待方式(与,或,任意,所有) } OS_FLAG_NODE;
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
事件组标志控制块空闲链表
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
第7章 µC/OS-II多事件同步机制1事件组标志同步机制基本原理
2
事件组标志基本操作
μCOS-II
µC/OS-II 操作系统标准教程
创建事件组标志OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *err)
基本流程如下: (1)参数检查。检查是否分配错误标志存储空间。 (2)条件检查。检查是否在中断服务程序中执行此程序。 (3)从空闲事件组标志控制块链表中申请一个控制块节点, 如果申请失败,将返回OS_FLAG_GRP_DEPLETED错误;否 则初始化申请的控制块节点成员变量。
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
阻塞式等待事件组标志OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err)
基本流程如下: (1)参数检查。检查是否为错误标志分配空间,是否指定了等待的 事件组标志。 (2)条件检查。检查是否在中断服务程序中执行此函数,事件类型 是否为事件组标志(OS_EVENT_TYPE_FLAG)。 (3)使用局部变量consume标识是否需要在当前任务等待的状态满 足后,将对应的等待位位取反,即是否为宏OS_FLAG_CONSUME, 如果需要,则置consume为
TRUE,否则为FALSE。 (4)根据等待方式选择不同的处理办法如果满足,根据consume的 值选择是否需要将等待的各位(即pgrp->OSFlagFlags &= ~flags_rdy);如果不满足,则调用函数OS_FlagBlock()阻塞当前进 程,引发新的调度,关于函数OS_FlagBlock()功能详细说明见后。
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
非阻塞式等待事件组标志OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err)
基本流程如下: (1)参数检查。检查是否为错误标志分配空间,是否指定了等待的 事件组标志。 (2)条件检查。检查是否在中断服务程序中执行此函数,事件类型 是否为事件组标志(OS_EVENT_TYPE_FLAG)。 (3)使用局部变量consume标识是否需要在当前任务等待的状态满 足后,将对应的等待位位取反,即是否为宏OS_FLAG_CONSUME, 如果需要,则置consume为TRUE,否则为FALSE。 (4)根据等待方式选择不同的处理办法,如果满足,根据consume 的值选择是否需要将等待的各位(即pgrp->OSFlagFlags &= ~flags_rdy);如果不满足直接退出,返回 OS_FLAG_ERR_NOT_RDY错误。
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
修改事件组标志状态OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U *err)
流程如下: (1)参数检查。检查是否为错误标志分配空间,是否指定了等待的 事件组标志。 (2)条件检查。检查是否为事件组标志 (OS_EVENT_TYPE_FLAG)。 (3)根据设置选项opt选择修改事件组标志控制块成员变量 OSFlagFlags的值。 (4)遍历此事件组标志所有等待任务,根据各任务的等待方式,查 看该任务等待的状态是否已经发生,如果已经发生,将调用函数 OS_FlagTaskRdy()使对应任务准备就绪,关于此函数的功能及源代 码分析见后。如果有相应的任务就绪,则引发新的调度。
2011-3-30
人民邮电出版社出版 杨宗德编著
μCOS-II
µC/OS-II 操作系统标准教程
删除事件标志组OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *err) 基本流程如下: (1)参数检查。检查是否为错误标志分配空间,是否指定了等待的事件组标志。 (2)条件检查。检查是否在中断服务程序中执行此函数,欲删除的对象是否为事件组 …… 此处隐藏:1797字,全部文档内容请下载后查看。喜欢就下载吧 ……