事件标志组

Pursue

简介

事件标志是一个用于指示事件是否发生的比特位,因为一个事件是否发生只有两种情况,
分别为事件发生和事件未发生,因此只需一个比特位就能够表示事件是否发生,µC/OS-III 用 1 表示事件发生,用 0 表示事件未发生。

  • 事件标志组是多个事件的集合(最多可以表示32个事件标志)。
  • 任意任务和中断都可以写这些位,但读只能由任务。
  • 可以等待某一位成立,或者等待多位同时成立。
    stm-8u1.png

API函数

使用流程:创建事件标志组–>设置事件标志–>获取事件标志

1
2
3
4
5
6
7
8
9
10
11
12
//创建事件标志组
void OSFlagCreate (OS_FLAG_GRP *p_grp, //指向事件标志组结构体指针
CPU_CHAR *p_name, //名字
OS_FLAGS flags, //事件标志组初始值
OS_ERR *p_err) //错误代码

//设置事件标志组中的事件
OS_FLAGS OSFlagPost (OS_FLAG_GRP *p_grp, //指向事件标志组结构体指针
OS_FLAGS flags, //选择指定位
OS_OPT opt, //POST_FLAG_SET or FLAG_CLR
OS_ERR *p_err) //错误代码
//返回值:设置后的事件标志值

等待事件标志组中的事件成立

1
2
3
4
5
6
7
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 等待入参 flags 中所有指定的事件被清 0
OS_OPT_PEND_FLAG_CLR_ANY 等待入参 flags 中任意指定的事件被清 0
OS_OPT_PEND_FLAG_SET_ALL 等待入参 flags 中所有指定的事件被置 1
OS_OPT_PEND_FLAG_SET_ANY 等待入参 flags 中任意指定的事件被置 1
调用上面四个选项还可以搭配下面三个
OS_OPT_PEND_FLAG_CONSUME 当等待到指定位后,清零对应位
OS_OPT_PEND_BLOCKING 标志组不满足条件时挂起任务
OS_OPT_PEND_NON_BLOCKING 标志组不满足条件时不挂起任务

示例

1
2
3
4
5
6
7
8
9
OS_FLAG_GRP flag;
#define FLAG_BIT0 (1 << 0)


OSFlagCreate(&flag, "flag", 0, &err);

ctr = OSFlagPost(&flag, FLAG_BIT0, OS_OPT_POST_FLAG_SET, &err);

ctr1 = OSFlagPend(&flag, FLAG_BIT0, 0, OS_OPT_PEND_FLAG_SET_ALL | OS_OPT_PEND_FLAG_CONSUME | OS_OPT_PEND_BLOCKING, 0, &err);
评论
目录
事件标志组