(七)事件组

一、概念

(1)用于实现任务与任务、任务与中断之间通信和同步,无数据传输
(2)不同于信号量的是,信号量是一对一的,而事件可以是一对多和多对一的,即一个任务等待多个事件或多个任务等待同一个事件
(3)逻辑与:等待的任意一个事件发生都可以唤醒
(4)逻辑或:等待的事件必须全部发生才会被唤醒

二、常用函数

(1)xEventGroupCreate创建事件组
(2)vEventGroupDelete删除事件组
(3)xEventGroupWaitBits等待事件发生
(4)xEventGroupSetBits设置事件,即置时间组中对应位为1
(5)xEventGroupSetBitsFromISR中断中设置事件
(6)xEventGroupClearBits清除事件

三、示例代码

#include "FreeRTOS.h"
#include "list.h"
#include "event_groups.h"
#include "led.h"

void task1(void* params);
void task2(void* params);

TaskHandle_t task1Handler;
TaskHandle_t task2Handler;

EventGroupHandle_t event;

#define EVENT1 (0x01 << 1)
#define EVENT2 (0x01 << 2)

int main()
{
    led_init();
    close();
    
    event = xEventGroupCreate();    //创建事件组
    if(NULL != event){
    }
    
    portENTER_CRITICAL();//进入临界区
    //创建两个任务
    xTaskCreate(task1,
                "task1",
                128,
                NULL,
                2,
                &task1Handler);
    
    xTaskCreate(task2,
                "task2",
                128,
                NULL,
                2,
                &task2Handler);
    portEXIT_CRITICAL();//退出临界区
    
    xPortStartScheduler();//开启任务调度器
    
    while(1);
}

//任务1设置事件
void task1(void* params)
{
    xEventGroupSetBits(event,(EVENT1|EVENT2));
    while(1);
}

//任务2等待事件
void task2(void* params)
{
    EventBits_t uxReturn;
    
    uxReturn = xEventGroupWaitBits(event,//事件句柄
                                   (EVENT1|EVENT2),//要等待的事件
                                   pdTRUE,//事件获取后退出是否要清除对应标志位
                                   pdTRUE,//事件与/事件或
                                   portMAX_DELAY//等待超时时间
                );
    if((uxReturn & (EVENT1|EVENT2)) == (EVENT1|EVENT2)){
        open();
    }
    while(1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/476415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最全 Java 面试八股文

2024 年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;一直以来我都想整理一套完美的面试宝典&#xff0c;奈何难抽出时间&#xff0c;这套 1000道的 Java 面试手册我整理了整整 1 个月&#xff0c;上传到 Git 上目前 star 数达到了 30K 这套互联网 Jav…

vulnhub打靶记录——Mycmsms

文章目录 一、环境布置主机发现 二、端口扫描nikto基本探测目录扫描CMS EXP搜索探查mysql数据库CMS代码审计CMS后台权限提升 一、环境布置 靶机在virtualbox中搭建&#xff0c;攻击机使用vmware中安装的kali&#xff0c;主要是解决kali能ping通靶机&#xff0c;同时能访问外网…

SAP BW升级至2023版本后需要注意的点

SAP BW/4HANA 升级至最新版本后&#xff0c;最大的注意点就是原本的HANA studio开发工具打开某些模型或者DTP时会出现某些报错&#xff0c;如图所示&#xff1a; 看到这个提示的时候就需要去下载最新的版本了&#xff0c;我们去到SAP官网 SAP Development Tools 官网已经开始推…

Czkawka重复文件查找工具

分享一款重复文件查找工具&#xff0c;Czkawka是一款简单、快速且免费的用于查找重复项、空文件夹、相似图像等的多功能的应用程序。可以从计算机中删除不必要的文件。 软件特色&#xff1a; 用内存安全的 Rust 编写&#xff0c;惊人的快 – 由于使用了或多或少的高级算法和多线…

解决idea粘贴空格时显示NBSP的问题并且在Registry中找不到editor.show.special.chars

1、解决java 复制代码NBSP问题 参考文章 原因&#xff1a;2020.2版本以后无法找到以上的选项来解决问题&#xff1b;之后的版本这个选项换地方了 解决办法&#xff1a;在设置中找到Advanced Settings&#xff0c;把Render special characters前面的对勾取消掉就好了。

微软开源Garnet高性能缓存服务安装

Garnet介绍 Garnet是一款微软研究院基于C#开发而开源的高性能缓存服务&#xff0c;支持Windows、Linux多平台部署&#xff0c;Garnet兼容Redis服务API&#xff0c;在性能和使用架构上较Redis有很大提升&#xff08;官方说法&#xff09;&#xff0c;并提供与Redis一样的命令操…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录 1、扫雷&#xff08;Google Kickstart2014 Round C Problem A&#xff09; 2、动态网格&#xff08;Google Kickstart2015 Round D Problem A&#xff09; 3、走迷宫&#xff08;模板&#xff09; 4、画图&#xff08;第六次CCF计算机软件能力认证&#xff09; 5、山…

mybatis-plus BaseMapper<T>不生效问题的解决方案

一、情景引入 MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC开发。官网&#xff1a;http://mybatis.org/mybatis-3/zh/index.html mybatis-plus更是为我们集成实现了一些基本的CRUD方法&#xff0c;为我们省去了许多重复的工作。然而&#xff0c;很多时候一些不正确…

用python的pandas读取excel文件中的数据

一、读取Excel文件 使用pandas的read_excel()方法&#xff0c;可通过文件路径直接读取。注意到&#xff0c;在一个excel文件中有多个sheet&#xff0c;因此&#xff0c;对excel文件的读取实际上是读取指定文件、并同时指定sheet下的数据。可以一次读取一个sheet&#xff0c;也可…

Appium+python自动化怎么查看程序所占端口号和IP

简介 这篇博文和分类看似没有多大关系&#xff0c;但是也是从上一篇衍生出来的产物&#xff0c;因为涉及到 FQ工具 Lantern &#xff0c;就算是给关注和支持的小伙伴们拓展一下眼界和知识面。而且好多人都阅读了上一篇没发现那个参考博客点不开吗&#xff1f;那是因为还没来的…

泛微OA常用的接口或方法(不公开)

泛微OA常用的接口或方法 记录一些平时工作用到的方法或属性&#xff0c;不公开&#xff0c;防忘记。 文章目录 泛微OA常用的接口或方法1 获取当前操作者2 根据人员id获取人员卡片信息3 获取浏览按钮的文本值4 插入 js 发送 post 请求5 插入 js 配合建模、后端接口实现发送 post…

如何在 Odoo 17 中为自定义模块添加设置菜单

Odoo 是一款极具影响力的开源企业资源规划和业务管理软件&#xff0c;用户可利用自定义模块灵活定制和增强其功能。在定制模块开发中&#xff0c;一个重要的方面是纳入设置菜单&#xff0c;使用户能够根据自己的独特需求对多个选项进行微调。 本文将引导您逐步了解如何在 Odoo…

Android Launcher开发注意事项

在开发Android Launcher时&#xff0c;需要关注性能、用户体验、权限管理、兼容性等方面&#xff0c;同时遵循相关的开发者政策和最佳实践。有几个重要的注意事项&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

『Mysql』Mysql四种分区方式及组合分区落地实现

&#x1f4e3;读完这篇文章里你能收获到 Mysql分区的概念Mysql分区四种分区方式的落地及案例Mysql分区的管理 文章目录 一、概念篇 1 分区是什么2 Mysql中分区原理3 Mysql中分区局限二、落地篇 1 Range分区2 Hash分区3 Key分区4 List分区5 组合分区三、Mysql如何管理分区 1 删…

【LAMMPS学习】三、构建LAMMPS(5)可选的构建设置

3、构建LAMMPS 3.5.可选的构建设置 LAMMPS 可以通过多种可选设置来构建。每个小节都解释了如何使用 CMake 和 make 进行构建。 3.5.1. C11 标准合规性 编译 LAMMPS 需要 C11 标准兼容编译器。 LAMMPS 2020 年 3 月 3 版是核心代码和大多数软件包与之前的 C98 标准兼容的最…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

oracle设置主键自增步骤

设置主键自增步骤&#xff1a; 每一张表都要设置序列&#xff0c;然后设置触发器。比mysql繁琐。 一、设置序列 选中表后&#xff0c;—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字&#xff0c;一定要全大写字母。 二、设置触发器…

摘录笔记——2024年3月20日

这位大佬介绍的技术PM方面心得&#xff0c;有一定的启发意义&#xff08;虽说我现在只是搬砖的&#xff0c;跟PM还有一定差距&#xff09;&#xff0c;现在摘录出来作为记录&#xff1a; 一文聊聊我理解的技术PM作为技术同学&#xff0c;不仅要写好自己的代码&#xff0c;做好…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…
最新文章