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

11.FreeRTOS_事件组

事件组概述

事件组的作用:

  • 可以等待某一个事件发生
  • 可以等待若干个事件发生
  • 可以等待若干个事件中的某一个事件发生

同步点是事件组的另一个使用方式,它可以让多个任务进行阻塞等待,当全部事件完成后,再一起解除任务的阻塞。常常用于合作关系的情况。

相关函数

创建事件组

函数声明如下:

EventGroupHandle_t xEventGroupCreate( void )

返回值:事件组的句柄

设置事件组

函数声明如下:

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet )

xEventGroup:事件组的句柄,设置哪一个事件组

uxBitsToSet :设置哪一个事件,以bit传入,设置bit3就传入 (1<<3),设置多个可用 ‘ | ’实现

等待事件组

函数声明如下:

EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait )

xEventGroup:事件组的句柄,设置哪一个事件组

uxBitsToWaitFor:要等待的事件,以bit传入

xClearOnExit:当函数返回之前,是否清除这个事件。传入pdFALSE、pdTRUE

xWaitForAllBits:是否等待全部

  • 传入pdFALSE代表有一个事件发生即可解除阻塞
  • 传入pdTRUE代表必须全部事件发生才可解除阻塞

xTicksToWait :超时时间

同步点

函数声明如下:

EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,const EventBits_t uxBitsToWaitFor,TickType_t xTicksToWait )

xEventGroup:事件组的句柄,设置哪一个事件组

uxBitsToSet:设置自己做完了哪一个事件,以bit传入

uxBitsToWaitFor:要等待哪些事件完成,以bit传入,只有当全部等待的事件完成后才可退出阻塞

xTicksToWait :超时

uxBitsToWaitFor设置的事件都完成后,多个任务会同时从这个函数退出来,不再阻塞。退出函数之后,会自动清除uxBitsToWaitFor设置的事件的位

验证实验

现在有3个任务,任务1在做一件很长时间的事情,任务2也在做一个很长时间的事情,任务3在等待这两个任务中其中一个完成后,打印task finish字符串。

具体代码实现如下:

EventGroupHandle_t xEventHandle_Test;/* 事件组句柄 */
void TaskAFunction(void *param){int i=0;int j=0;while(1){/* 做一个很长时间的任务 */for(i=0;i<10000;i++){j++;}/* 设置事件0 */xEventGroupSetBits(xEventHandle_Test,1<<0);}
}void TaskBFunction(void *param){int i=0;int j=0;while(1){/* 做一个很长时间的任务 */for(i=0;i<20000;i++){j++;}/* 设置事件1 */xEventGroupSetBits(xEventHandle_Test,1<<1);}
}
void TaskCFunction(void *param){while(1){/* 等待事件组,pdFALSE代表等待的事件有一个发生即可解除阻塞 */xEventGroupWaitBits(xEventHandle_Test,(1<<0)|(1<<1),pdTRUE,pdFALSE,portMAX_DELAY);printf("task finish\r\n");}
}int main( void )
{TaskHandle_t xHandleTask1;TaskHandle_t xHandleTask2;TaskHandle_t xHandleTask3;prvSetupHardware();SerialPortInit();printf("UART TEST\r\n");/* 创建事件组 */xEventHandle_Test = xEventGroupCreate();xTaskCreate(TaskAFunction,"TaskA",100,(void*)NULL,1,&xHandleTask1);xTaskCreate(TaskBFunction,"TaskB",100,(void*)NULL,1,&xHandleTask2);xTaskCreate(TaskCFunction,"TaskC",100,(void*)NULL,1,&xHandleTask3);vTaskStartScheduler();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Python和MediaPipe实现手势虚拟鼠标控制
  • 自动驾驶论文总结
  • SQL 索引
  • PyTorch DataLoader 学习
  • 2024前端面试真题【CSS篇】
  • 【数据结构】线性表----队列详解
  • 【2024_CUMCM】时间序列3-一元时间序列分析的模型
  • Spring容器加载Bean和JVM加载类
  • 【网络安全】Oracle:SSRF获取元数据
  • Python编程学习笔记(3)--- 操作列表
  • C++的入门基础(二)
  • vue 画二维码及长按保存
  • 基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)
  • 【Linux】 GCC/G++与Makefile使用
  • Android Spinner
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2019.2.20 c++ 知识梳理
  • EventListener原理
  • iOS 颜色设置看我就够了
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Laravel Telescope:优雅的应用调试工具
  • LeetCode29.两数相除 JavaScript
  • Markdown 语法简单说明
  • MaxCompute访问TableStore(OTS) 数据
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 经典排序算法及其 Java 实现
  • 使用Gradle第一次构建Java程序
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • "无招胜有招"nbsp;史上最全的互…
  • #laravel 通过手动安装依赖PHPExcel#
  • #QT(TCP网络编程-服务端)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (26)4.7 字符函数和字符串函数
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)逆序输出字符串
  • (ibm)Java 语言的 XPath API
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Sublime Text3配置Lua运行环境
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net 4.0并行库实用性演练
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 调用php,php 调用.net com组件 --
  • .net 连接达梦数据库开发环境部署
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • [Android]通过PhoneLookup读取所有电话号码
  • [BZOJ]4817: [Sdoi2017]树点涂色