UCOSIII实时操作系统------事件标志组


前言

UCOSIII实时操作系统------事件标志组


提示:以下是本篇文章正文内容,下面案例可供参考

一、概述

前面讲述了UCOSIII的信号量、互斥信号量,它们都可以完成任务的同步。但是有时候一个任务可能需要和多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:
“或”同步:等待多个事件时,任何一个事件发生 ,任务都被同步,这个就称为“或”同步;
“与”同步:当所有的事件都发生时任务才被同步,这种同步机制被称为“与”同步。

事件标志组是专门管理标志位,一个事件标志组可以管理32个标志位。

在前后台系统,经常会用到标志位,查询标志位是否置位,有明显的缺点,CPU得不到休息,会一直工作查询,增加CPU的功耗。

void main(void)
{
     while(1)
     {
          if(g_iwdg_reset)
          {

          }

          if(g_wwdg_reset)
          {
                 g_wwdg_reset=0;
          }

          if(g_usart1_event)
          {

          }
          
          if(g_usart3_event)
          {

          } 
          
          if(g_rtc_wakeup_event)
          {

          } 
          
          if(g_rtc_alarm_event)
          {

          }         
                                                            
     }

}

二、创建事件标志组

代码如下(示例):

void  OSFlagCreate (OS_FLAG_GRP  *p_grp,
                    CPU_CHAR     *p_name,
                    OS_FLAGS      flags,
                    OS_ERR       *p_err)

参数
p_grp,事件标志组对象
p_name,事件标志组的名字
flags,事件标志组里所有标志位的初值,默认写0
p_err,返回错误码,没有错误的就返回OS_ERR_NONE

三、等待事件标志组

代码如下(示例):

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)

参数
p_grp,事件标志组对象
flags,要等待哪些标志位;0x01,则等待bit0;0x05,则等待bit0和bit2;0x83,则等待bit0、bit1、bit7。
timeout,超时时间,默认写0,一直等待
opt,默认写以下格式
OS_OPT_PEND_FLAG_SET_ANY + OS_OPT_PEND_FLAG_CONSUME+OS_OPT_PEND_BLOCKING
OS_OPT_PEND_FLAG_SET_ANY,等待任意一个标志位置位
OS_OPT_PEND_FLAG_CONSUME,等待任意一个标志位成功后,就自动将其清零
OS_OPT_PEND_BLOCKING,阻塞等待
OS_OPT_PEND_FLAG_SET_ALL,等待所有标志位置位,才能跳出阻塞等待
p_ts,用于记录等待事件花了多长时间,默认写NULL,不记录。
p_err,返回错误码,没有错误的就返回OS_ERR_NONE

返回值
返回等待成功的标志位。

四、设置事件标志组

OS_FLAGS  OSFlagPost (OS_FLAG_GRP  *p_grp,
                      OS_FLAGS      flags,
                      OS_OPT        opt,
                      OS_ERR       *p_err)

参数
p_grp,事件标志组对象
flags,结合opt参数一起使用。设置/清零哪些标志位,0x01,则对应bit0;0x05,则对应bit0和bit2;0x83,则对应bit0、bit1、bit7。
opt
.OS_OPT_POST_FLAG_SET,对应的bit置位
.OS_OPT_POST_FLAG_CLR,对应的bit清零
p_err,返回错误码,没有错误的就返回OS_ERR_NONE


总结

以上就是今天要讲的内容,本文仅仅简单介绍了UCOSIII实时操作系统------事件标志组的使用,而UCOSIII实时操作系统还有更多的功能等着我们去挖掘,其他内容请移步博主其他文章或关注博主等待后续发布。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值