FreeRTOS事件组

一.事件组是什么?

事件类似与信号量,可以等待某一个事件的发生,但是也可以等待某几件事情的发生。这个就比较重要了。列如,在环境监测中,温度达到30°以上同时湿度百分之50以上,就报警。在这种情况下信号量就不太适应了。这时候可以使用事件。

二.如何使用事件组

首先我们可以看到FreeRTOSConfig.h中

复制代码
#define configUSE_16_BIT_TICKS 1

如果定义为1,EventBits_t就是16位,最多只能存储8个不同事件,为0的话,EventBits_t就是32位可以存储24个不同的事件。

当我们使用的时候,一个任务中可以令EventBits某一位置1,其他一个任务中可以一直阻塞等待EventBits_t的这一位置1.这样就完成了信号量的功能。我们也可以任务1发生,第一位置1,任务二发生,第二位置1,任务三一直阻塞等待第一位和第二位都为1.这样就完成事件专属的特性。

三.事件代码层

cpp 复制代码
static EventGroupHandle_t Event_Handle=NULL;
//创建Event_Handle
Event_Handle=xEventGroupCreate();

static void task1(void * parameter)
{

 while(1)
  {
     /*

       */
    // 低一位置1   
   xEventGroupSetBits(Event_Handle,1<<0); 
   
  }


}
static void task2(void * parameter)
{

 while(1)
  {
     /*

       */
    // 低二位置1   
   xEventGroupSetBits(Event_Handle,1<<1); 
   
  }


}
static void task3(void * parameter)
{

 while(1)
  {  
       //等待阻塞
     xEventGroupWaitBits(Event_Handle,
                         (1<<0|1<<1), //感兴趣的位
                          pdTRUE,       //退出时清0
                          pdTRUE,       //满足感兴趣的所有事件          
                          portMAX_DELAY);//一直等待
   
  }


}
相关推荐
aerror1 小时前
使用mpu6500/6050, PID,互补滤波实现一个简单的飞行自稳控制系统
单片机·飞控
TDengine (老段)2 小时前
TDengine 基础功能——数据写入
大数据·数据库·物联网·oracle·时序数据库·tdengine·涛思数据
yifa201604043 小时前
STM32、Arduino和51单片机
stm32·学习·51单片机
深圳市尚想信息技术有限公司4 小时前
【深尚想】华大北斗TAU1114-1216BB0高精度/GNSS定位模组!车载/物联网专用 电子元器件解析
物联网·gps·gnss·华大北斗·定位模组
tyl21105 小时前
凌科芯安国产安全MCU简介
单片机·嵌入式硬件·安全
郦7776 小时前
国产入门级32位单片机PY32F002A开发板
单片机·嵌入式硬件
passer__jw76716 小时前
【51单片机】6. 定时器、按键切换流水灯&时钟Demo
单片机·51单片机
Wendy_robot16 小时前
【零基础勇闯嵌入式岗】从单片机低功耗中获得的启发
c++·单片机·嵌入式硬件
移远通信17 小时前
解锁Wi-SUN潜能!移远通信发布KCM0A5S模组,点亮智慧城市新图景
物联网
智联物联17 小时前
智慧工厂物联网解决方案:纺织厂边缘计算网关应用
物联网·5g·边缘计算·智能制造·智慧工厂·实时监测·工业无线模块