FreeRTOS事件组

简介: 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.这样就完成事件专属的特性。

三.事件代码层

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);//一直等待
   
  }
}
目录
相关文章
|
9月前
|
移动开发
【FreeRTOS】事件组的使用
【FreeRTOS】事件组的使用
FreeRTOS事件组之事件组的创建(xEventGroupCreate())
FreeRTOS事件组之事件组的创建(xEventGroupCreate())
468 0
|
9月前
|
存储 API
|
消息中间件 测试技术 API
FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)
我们在前面单独介绍过FreeRTOS的任务通知和消息队列, 但是在FreeRTOS中任务间的通讯还有信号量,邮箱,事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析
1192 0
FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)
|
9月前
|
存储
FreeRTOS入门教程(事件组概念和函数使用)
FreeRTOS入门教程(事件组概念和函数使用)
191 0
|
消息中间件 传感器 编译器
FreeRTOS记录(五、FreeRTOS任务通知)
在前面几篇文章我们已经对FreeRTOS任务API和任务调度原理进行了相对深入的分析 这篇文章主要针对任务与任务之间的交互,信息传递相关的API组件进行分析
483 0
 FreeRTOS记录(五、FreeRTOS任务通知)
|
9月前
【FreeRTOS】任务通知的使用
【FreeRTOS】任务通知的使用
|
安全 测试技术 API
5- FreeRTOS任务通知
5- FreeRTOS任务通知
|
存储 消息中间件 API
8-事件组或标志
8-事件组或标志

热门文章

最新文章