【学习FreeRTOS】第16章——FreeRTOS事件标志组
1.事件标志组简介
事件标志位:用一个位,来表示事件是否发生
事件标志组是一组事件标志位的集合, 可以简单的理解事件标志组,就是一个整数。
事件标志组的特点:
- 它的每一个位表示一个事件(高8位不算)
- 每一位事件的含义,由用户自己决定,如:bit0表示按键是否按下,bit1表示是否接受到消息
这些位的值为1:表示事件发生了;值为0:表示事件未发生 - 任意任务或中断都可以读写这些位
- 可以等待某一位成立,或者等待多位同时成立

一个事件组就包含了一个 EventBits_t 数据类型的变量,变量类型 EventBits_t 的定义如下所示。EventBits_t 实际上是一个 16 位或 32 位无符号的数据类型 (一般设为32位)
typedef TickType_t EventBits_t;
#if ( configUSE_16_BIT_TICKS = = 1 )typedef uint16_t TickType_t;
#else typedef uint32_t TickType_t;
#endif
#define configUSE_16_BIT_TICKS 0
事件标志组与队列、信号量的区别
事件标志组和信号量存在区别,它们之间有一个可以沟通的桥梁——队列集,通过队列集可以模拟事件标志位

2.事件标志组相关API函数介绍
- xEventGroupCreate():使用动态方式创建事件标志组
- xEventGroupCreateStstic():使用静态方式创建事件标志组
- xEventGroupClearBits():清零事件标志位
- xEventGroupClearBitsFromISR():在中断中清零事件标志位
- xEventGroupSetBits():设置事件标志位
- xEventGroupSetBitsFromISR():在中断中设置事件标志位
- xEventGroupWaitBits():等待事件标志位
- xEventGroupSync():设置事件标志位,并等待事件标志位
- vEventGroupDelete():删除事件标志组
- xEventGroupGetBits():获取事件组中各事件标志位的值
- xEventGroupGetBitsFromISR():在中断中获取事件组中各事件标志位的值
2.1.使用动态方式创建事件标志组xEventGroupCreate()
EventGroupHandle_t xEventGroupCreate (void) ;
- 返回值:NULL,事件标志组创建失败;其他值,事件标志组创建成功,返回其句柄
2.2.清零事件标志位xEventGroupClearBits()
EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToClear)
- 形参xEventGroup:待操作的事件标志组句柄
- 形参uxBitsToSet:待清零的事件标志位
- 返回值:整数,清零事件标志位之前事件组中事件标志位的值
2.3.设置事件标志位xEventGroupSetBits()
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet)
- 形参xEventGroup:待操作的事件标志组句柄
- 形参uxBitsToSet:待设置的事件标志位
- 返回值:整数,函数返回时事件组中事件标志位的值
2.4.等待事件标志位xEventGroupWaitBits()
EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait)
- 形参xEvenrGroup:等待的事件标志组句柄
- 形参uxBitsToWaitFor:等待的事件标志位,(可以用逻辑或等待多个事件标志位)
- 形参xClearOnExit:成功等待到事件标志位后,清除事件组中对应的事件标志位,pdTRUE清除;pdFALSE:不清除
- 形参xWaitForAllBits:等待uxBitsToWaitFor 中的所有事件标志位(逻辑与)pdTRUE,等待的位全部为1;pdFALSE,等待的位某个为1
- 形参xTicksToWait:等待的阻塞时间
- 返回值
等待的事件标志位值:等待事件标志位成功,返回等待到的事件标志位
其他值:等待事件标志位失败,返回事件组中的事件标志位 - 特点:可以等待某一位、也可以等待多位,等到期望的事件后,还可以清除某些位
注意,本函数只能完成设置标志位的某一位或者全部,并不能设置某几位。比如8各中的1个或8个,不能设置2-7个
2.5.设置事件标志位,并等待事件标志位xEventGroupSync()
EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,const EventBits_t uxBitsToWaitFor,TickType_t xTicksToWait)
- 形参xEvenrGroup:等待的事件标志组句柄
- uxBitsToSet:达到同步点后,要设置的事件标志
- uxBitsToWaitFor:等待的事件标志
- xTicksToWait:等待的阻塞时间
- 返回值
等待的事件标志位值:等待事件标志位成功,返回等待到的事件标志位
其他值:等待事件标志位失败,返回事件组中的事件标志位 - 特点:同步——用于Task1完成后置1,等待Task2完成之后才算完成事件
3.事件标志组实验
- 实验目的:学习 FreeRTOS 的事件标志组API函数的使用。
- 实验设计:将设计三个任务:start_task、task1、task2
start_task-用来创建task1和task2任务,并创建事件标志组
task1-读取按键按下键值,根据不同键值将事件标志组相应事件位置一,模拟事件发生
task2-同时等待事件标志组中的多个事件位,当这些事件位都置 1 的话就执行相应的处理

相关文章:
【学习FreeRTOS】第16章——FreeRTOS事件标志组
1.事件标志组简介 事件标志位:用一个位,来表示事件是否发生 事件标志组是一组事件标志位的集合, 可以简单的理解事件标志组,就是一个整数。 事件标志组的特点: 它的每一个位表示一个事件(高8位不算&…...
Echarts 柱状图的 itemStyle的normal中label如何format?
在 Echarts 中,可以通过设置 formatter 属性来对柱状图的标签进行自定义格式化。例如: itemStyle: {normal: {label: {show: true,formatter: function(params) {return params.value.toFixed(2); // 将标签内容保留两位小数}}} } 在上面的例子中&…...
我的笔记:数据体系规则
1、中台数据体系特征 覆盖全域数据:数据集中建设,覆盖所有业务过程数据; 结构层次清晰:纵向数据分层,横向主题域,业务过程划分,让整个层析结构清晰易理解; 数据准确一致:…...
苍穹外卖 day2 反向代理和负载均衡
一 前端发送的请求,是如何请求到后端服务 前端请求地址:http://localhost/api/employee/login 路径并不匹配 后端接口地址:http://localhost:8080/admin/employee/login 二 查找前端接口 在这个页面上点击f12 后转到networ验证࿰…...
【SpringBoot】SpringBoot完整实现电子商务系统
一个完整的电子商务系统需要涉及到前台展示、后台管理、商品管理、订单管理、用户管理等各方面。这里提供一个简单的实现示例,供参考。 前端代码 前端使用Vue框架,以下是部分代码示例: 商品列表页: <template><div>…...
RT-Thread 线程管理(学习二)
线程相关操作 线程相关的操作包括:创建/初始化、启动、运行、删除/脱离。 动态线程与静态线程的区别:动态线程是系统自动从动态内存堆上分配栈空间与线程句柄(初始化heap之后才能使用create创建动态线程),静态线程是…...
ESP32应用教程(1)— VL53L3CX距离传感器
文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 IC写1个字节数据 3.3 IC读1个字节数据 3.4 IC写多个字节数据 3.5 IC读多个字节数据 3.6 IC…...
Redis从基础到进阶篇(一)
目录 一、了解NoSql 1.1 什么是Nosql 1.2 为什么要使用NoSql 1.3 NoSql数据库的优势 1.4 常见的NoSql产品 1.5 各产品的区别 二、Redis介绍 2.1什么是Redis 2.2 Redis优势 2.3 Redis应用场景 2.4 Redis下载 三、Linux下安装Redis 3.1 环境准备 3.2 Redis的…...
postgresql的基本使用
添加字段 ALTER TABLE AAF_SYS_PARAM ADD REFER_ID VARCHAR(64); ALTER TABLE AAF_SYS_PARAM ADD OPTION_JSON VARCHAR(3000);COMMENT ON COLUMN AAF_SYS_PARAM.REFER_ID IS 关联节点ID; COMMENT ON COLUMN AAF_SYS_PARAM.OPTION_JSON IS 选择项枚举json; 修改字段 ALTER T…...
ABC 258 G Triangle(bitset 优化)
ABC 258 G Triangle(bitset 优化) ABC 258 G Triangle 大意:给出一个邻接矩阵 ,用来记录两两元素间是否连接 , 计算其中三元环的数目。 思路: 不妨先想暴力解法 for(int i 1 ; i < n ; i ){for(int j i 1 ; j < n ;…...
使用StreamLold写入 Starrocks报错:Caused by org
问题描述 使用StreamLoad写入Starrocks报错,报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…...
WX1860- ngbe-1.2.5 xdp程序在路由模式下,使用iperf工具测试数据包不转发,用jmeter可以
本地验证时重定向iperf包有出现calltrace错误,经推断,系统PAGE_SIZE<8k时可能出现(getconf PAGE_SIZE指令可查看),按下图将ngbe_main.c的2350行ngbe_rx_bufsz改为ngbe_rx_pg_size可修复。其次,需要将加载…...
PHPStudy 安装tp8 php8.2.9 安装XDbug、redis扩展
一、PhpStudy升级PHP版本,安装PHP8.2操作步骤 1.1、官网下载最新的php版本 打开Windows版的官网下载,地址:https://windows.php.net/download/ 页面上有不同的PHP版本,这里我们下载的是64位nts版的PHP8.2.9。 1.2、解压下载的文…...
结构体指针和结构体数组指针
结构体指针和结构体数组指针是不同的类型。 结构体指针定义:Student *stu 结构体指针的步长是一个结构体的大小; 结构体数组指针定义:Student (*stu)[] 结构体数组指针的步长是整个结构体数组的大小。 例程: #include <stdio…...
libdrm全解析二十 —— 源码全解析(17)
接前一篇文章:libdrm全解析十九 —— 源码全解析(16) 本文参考以下博文: DRM 驱动程序开发(VKMS) 特此致谢! 本文继续对include/drm/drm.h中实际功能宏定义进行讲解。 29. DRM_IOCTL_SET_MAS…...
基于docker搭建owncloud Harbor 构建镜像
环境介绍:ContenOS7.9 docker17.12.1-ce 使用mysql:5.7和 owncloud 镜像,构建一个个人网盘。 docker pull owncloud #拉取镜像 docker pull mysql5.7 创建容器 docker run --name owncloud-mysql -p 3306:3306 -e MYSQL\_ROOT\_PASSWORDroot …...
往Buildroot中增加Qt项目
前言 目的:应用开发时最初是没有和buildroot中一起编译时,后面应用程序写的差不多时,同事问我怎么把应用程序打包到文件系统中,然后发布时跟随文件系统一起发布,并且增加打包启动脚本。所以本文在已经可以单独编译的基…...
C#-Tolewer和ToUpper的使用
目录 简介: 好处: 过程: 总结: 简介: 字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。 ToLower和ToUpper是字符串处理函数,用于将字符中的英文字母转换为小…...
RabbitMQ集群搭建和测试总结_亲测
RabbiMQ简介 RabbitMQ是用Erlang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3)镜像模式(把需要的队列…...
SQLSTATE[IMSSP]: The active result for the query contains no fields.
我的是SQL server 报错场景,代码: $psendmx_sql"SET IDENTITY_INSERT PSENDMX ON;INSERT INTO psendmx (DJBH,MIBH,MXBH,SPDM,GG1DM,GG2DM,SL,SL_2,CKJ,ZK,DJ,DJ_1,JE,HH) VALUES {$mx_values};SET IDENTITY_INSERT PSENDMX OFF;"; $a$db_er…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
RLHF vs RLVR:对齐学习中的两种强化方式详解
在语言模型对齐(alignment)中,强化学习(RL)是一种重要的策略。而其中两种典型形式——RLHF(Reinforcement Learning with Human Feedback) 与 RLVR(Reinforcement Learning with Ver…...
