µC/OS-III-事件标志
事件标志与信号量都是属于任务间同步的一种机制,信号量一般用于任务间的单事件同步,对于任务间的多事件同步,使用信号量来实现比较复杂,µC/OS-III提供了事件标志,事件标志就能够很好地处理任务间的多任务同步。
事件标志是一个事件是否发生用一个比特位表示,一个事件是否发生只有两种情况,分别为事件发生和事件未发生,因此只需一个比特位就能够表示事件是否发生,µC/OS-III 用1表示事件发生,用0表示事件未发生。
一、µC/OS-III事件标志相关 API 函数
1)函数 OSFlagCreate()
创建一个事件标志组。
void OSFlagCreate(
OS_FLAG_GRP* p_grp, //指向事件标志组结构体的指针
CPU_CHAR* p_name, //指向作为事件标志组名的 ASCII 字符串的指针
OS_FLAGS flags, //事件标志组的初始值
OS_ERR* p_err) //指向接收错误代码变量的指针
2) 函数 OSFlagDel()
删除一个事件标志组。
OS_OBJ_QTY OSFlagDel(
OS_FLAG_GRP* p_grp, //指向事件标志组结构体的指针
OS_OPT opt, //函数操作选项
OS_ERR* p_err); //指向接收错误代码变量的指针
返回值:OS_OBJ_QTY类型,被终止挂起等待事件标志任务的数量。
3)函数OSFlagPend()
用于等待事件标志组中的事件。
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) //指向接收错误代码变量的指针
返回值:OS_FLAGS类型,任务实际等待到的事件标志。
4)OSFlagPendAbort()
终止任务挂起等待事件标志组。
OS_OBJ_QTY OSFlagPendAbort(
OS_FLAG_GRP* p_grp, //指向事件标志组结构体的指针
OS_OPT opt, //函数操作选项
OS_ERR* p_err) //指向接收错误代码变量的指针
返回值:OS_OBJ_QTY类型,被终止挂起任务的数量。
5)函数 OSFlagPendGetFlagsRdy()
用于获取任务等待到的事件。
OS_FLAGS OSFlagPendGetFlagsRdy(
OS_ERR p_err) //指向接收错误代码变量的指针
返回值:OS_FLAGS类型,任务获取到的事件标志。
6)函数 OSFlagPost()
用于设置事件标志组中的事件。
OS_FLAGS OSFlagPost(
OS_FLAG_GRP p_grp, //指向事件标志组结构体的指针
OS_FLAGS flags, //等待的事件标志
OS_OPT opt, //函数操作选项
OS_ERR* p_err) //指向接收错误代码变量的指针
返回值:OS_FLAGS类型,事件标志组更新后的事件标志值。