当前位置: 首页 > news >正文

B站Michale_ee——ESP32_IDF SDK——FreeRTOS_5 事件组同步与等待

一、事件组等待

1.API简介

(1)创建事件组

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)等待事件组中是否有相应的位被设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)设置事件组中相应位

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.示例代码及运行结果

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "freertos/event_groups.h"       // add by lxl#define BIT_0 ( 1 << 0 )
#define BIT_4 ( 1 << 4 )
EventGroupHandle_t xCreatedEventGroup;
TaskHandle_t Task1Handle = NULL;void Task1(void *pvparam)
{while(1){printf("Task1 begin to wait\n");xEventGroupWaitBits(xCreatedEventGroup, BIT_0 | BIT_4, pdTRUE, pdTRUE,  portMAX_DELAY);printf("Task1 BIT_0 and BIT_4 is Set!\n");vTaskDelay(pdMS_TO_TICKS(1000));}
}void Task2(void *pvparam)
{vTaskDelay(pdMS_TO_TICKS(1000));while(1){printf("Task2 begin to set bit0\n");xEventGroupSetBits(xCreatedEventGroup, BIT_0);vTaskDelay(pdMS_TO_TICKS(5000));printf("Task2 begin to set bit0\n");xEventGroupSetBits(xCreatedEventGroup, BIT_4);vTaskDelay(pdMS_TO_TICKS(5000));}
}void app_main(void)
{xCreatedEventGroup = xEventGroupCreate();if( xCreatedEventGroup == NULL ){printf("EventGroup create fail.\n");}else{printf("EventGroup create success.\n");vTaskSuspendAll();xTaskCreatePinnedToCore(Task1, "Task1", 1024*5, NULL, 1, &Task1Handle, 1);      //! ESP32-S3为双核,CPU0主要运行WiFi和蓝牙;CPU1用于运行应用程序;xTaskCreatePinnedToCore(Task2, "Task2", 1024*5, NULL, 1, NULL, 1);xTaskResumeAll();}
}

在这里插入图片描述

二、事件组同步

1.事件组等待与事件组同步的区别

在这里插入图片描述在这里插入图片描述

2.API 简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.示例代码及运行结果

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "freertos/event_groups.h"       // add by lxl#define TASK_0_BIT ( 1 << 0 )
#define TASK_1_BIT ( 1 << 1 )
#define TASK_2_BIT ( 1 << 2 )
#define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )EventGroupHandle_t xEventBits;
TaskHandle_t Task1Handle = NULL;void Task0(void *pvparam)
{while(1){printf("Task0 begin\n");vTaskDelay(pdMS_TO_TICKS(1000));printf("Task0 Set BIT_0!\n");xEventGroupSync(xEventBits, TASK_0_BIT, ALL_SYNC_BITS, portMAX_DELAY);printf("Task0 Sync\n");vTaskDelay(pdMS_TO_TICKS(10000));}
}void Task1(void *pvparam)
{while(1){printf("Task1 begin\n");vTaskDelay(pdMS_TO_TICKS(3000));printf("Task1 Set BIT_1!\n");xEventGroupSync(xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY);printf("Task1 Sync\n");vTaskDelay(pdMS_TO_TICKS(10000));}
}void Task2(void *pvparam)
{while(1){printf("Task2 begin\n");vTaskDelay(pdMS_TO_TICKS(5000));printf("Task2 Set BIT_2!\n");xEventGroupSync(xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY);printf("Task2 Sync\n");vTaskDelay(pdMS_TO_TICKS(10000));}
}void app_main(void)
{xEventBits = xEventGroupCreate();if( xEventBits == NULL ){printf("EventGroup create fail.\n");}else{printf("EventGroup create success.\n");vTaskSuspendAll();xTaskCreatePinnedToCore(Task0, "Task0", 1024*5, NULL, 1, NULL, 1);      //! ESP32-S3为双核,CPU0主要运行WiFi和蓝牙;CPU1用于运行应用程序;xTaskCreatePinnedToCore(Task1, "Task1", 1024*5, NULL, 1, NULL, 1);xTaskCreatePinnedToCore(Task2, "Task2", 1024*5, NULL, 1, NULL, 1);xTaskResumeAll();}
}

在这里插入图片描述

相关文章:

  • 如何让模型聪明地选择特征:一种“蒸馏及选择”的方法
  • 使用 Tesseract 实现藏文OCR
  • 大数据面试问答-数据湖
  • Codex CLI轻量级 AI 编程智能体 :openai又放大招了
  • 正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真
  • 在pycharm profession 2020.3上安装使用xlwings
  • Ubuntu 安装 MySQL8
  • 游戏通用活动框架
  • C++拷贝构造函数详解
  • Wireshark网络抓包工具基础使用教程
  • 4.5 使用busybox制作根文件系统
  • 开源ERP系统对比:Dolibarr、ERPNext与Odoo
  • AI大模型-解决开发环境配置不足问题
  • [FPGA Video] AXI4-Stream Remapper
  • stm32 hal库 SPI使用(二)硬件SPI的HAL库函数调用
  • spring-- 事务失效原因及多线程事务失效解决方案
  • Flutter——数据库Drift开发详细教程(二)
  • Flutter AppBar 详解
  • “会话技术”——Cookie_(2/2)原理与使用细节
  • 【二叉树】java源码实现
  • “三桶油”一季度净赚966亿元:业绩分化加剧,有人欢喜有人愁
  • 旭辉控股集团:去年收入477.89亿元,长远计划逐步向轻资产业务模式转型
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 证监会:坚决拥护党中央对王建军进行纪律审查和监察调查决定
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 如何反击右翼思潮、弥合社会分裂:加拿大大选镜鉴