μC/OSIII——任务同步(事件标志组)

来源:互联网 发布:ubuntu使用wine 编辑:程序博客网 时间:2024/05/17 02:14
使用情况

    当任务需要与多个事件的发生同步,可以使用事件标志组。有两种情况:

  1. 或同步——等待多个事件发生,任何一个事件发生,任务就发生(同步)
  2. 与同步——等待多个事件发生,当所有事件都发生,任务就发生(同步)

使用方法

    事件标志组服务函数的实现代码在os_flag.c文件中,在编译时,将os_cfg.h文件中的配置常数OS_CFG_FLAG+EN设为1就可启用这些服务函数。

    常用的事件标志组的服务函数有:

  • OSFlagCreate() 创建事件标志组
  • OSFlagPend()    等待事件标志
  • OSFlagPost()     向事件标志组发布标志

void OSFlagCreate(OS_FLAG_GRP  *p_grp,            指向事件标志组的指针

                               CPU_CHAR       *p_name,         字符串——事件标志组的名字

                               OS_FLAGS         flags,               事件标志组的初始值

                               OS_ERR             err)                  该函数返回的错误码

 

OS_FLAGS  OSFlagPend(OS_FLAG_GRP  *p_grp,    指向事件标志组的指针

                                       OS_FLAGS        flags,       等待事件标志组的哪一位

                                       OS_TICK           timeout,  指定等待事件标志组的超时时间(时钟节拍数)

                                       OS_OPT            opt,

                                       CPU_TS            *p_ts,       指向时间戳

                                       OS_ERR            *p_err)     该函数返回的错误码

opt  决定任务等待的条件

            OS_OPT_PEND_FLAG_CLR_ALL           等待标志组所有的标志清零

            OS_OPT_PEND_FLAG_CLR_ANY          等待标志组任意一个标志清零

            OS_OPT_PEND_FLAG_SET_ALL            等待标志组所有的标志置位

            OS_OPT_PEND_FLAG_SET_ANY          等待标志组任意一个标志置位

        辅助选项

            +OS_OPT_PEND_FLAG_CONSUME     等待条件满足后将对应的标志清零

            +OS_OPT_PEND_BLOCKING (OS_OPT_PEND_NON_BLOCKING)

            在标志组不满足条件时,任务选择挂起(不挂起)

 

OS_FLAGS OSFlagPost(OS_FLAG_GRP   *p_grp,     指向事件标志组的指针

                                     OS_FLAGS          flags,        决定对哪些标志位进行置位或清零

                                     OS_OPT             opt,

                                     OS_ERR              *p_err)     函数返回错误码

opt   OS_OPT_POST_FLAG_SET 置位  OS_OPT_POST_FLAG_CLR 清零

 

使用实例

 

实验结果





0 0
原创粉丝点击