1. xEventGroupCreate ():动态创建(临时借内存)

作用:
向系统(FreeRTOS 的堆内存)“临时申请” 一块内存来存放事件组,不需要我们自己提前准备内存。
例子(基于你的代码修改):

#include "FreeRTOS.h"
#include "event_groups.h"// 定义事件组句柄(相当于"记录本的编号")
EventGroupHandle_t DoorEventGroup;void InitSystem() {// 动态创建事件组:向系统申请内存DoorEventGroup = xEventGroupCreate();// 检查是否创建成功(可能申请内存失败)if (DoorEventGroup == NULL) {printf("创建失败!系统内存不够了\n");} else {printf("创建成功!用的是系统临时分配的内存\n");}
}

特点:
简单方便:只需要调用函数,不用自己管内存细节。
有失败风险:如果系统内存(堆)不够,会返回NULL(申请失败)。
内存会自动管理:不需要时系统会回收(但 FreeRTOS 中事件组一般不会主动释放,需要手动处理)。

2. xEventGroupCreateStatic (&EventBuf):静态创建(自己准备内存)

作用:
不向系统申请内存,而是用我们自己提前 “买好” 的内存(静态内存)来存放事件组,需要手动提供一块内存缓冲区。
例子(对比动态创建):

#include "FreeRTOS.h"
#include "event_groups.h"// 1. 自己准备一块内存(相当于"自己买的房间")
// 类型必须是StaticEventGroup_t,这是FreeRTOS规定的
StaticEventGroup_t EventBuf;  // 静态内存缓冲区// 2. 事件组句柄(记录本编号)
EventGroupHandle_t DoorEventGroup;void InitSystem() {// 静态创建事件组:使用自己准备的EventBuf内存DoorEventGroup = xEventGroupCreateStatic(&EventBuf);//创建时需要自己给一个事件内存,如最上面// 静态创建几乎不会失败(只要EventBuf是有效的)printf("创建成功!用的是自己提前准备的内存\n");
}

特点:
需要手动准备内存:必须定义一个StaticEventGroup_t类型的变量(如EventBuf),作为内存缓冲区。
可靠性高:只要提前准备了内存,就一定能创建成功,不会因为 “系统内存不足” 失败。
内存地址固定:内存是编译时就分配好的(放在全局区),地址不会变,适合对内存位置有要求的场景。

区别:
在这里插入图片描述

为什么需要两种方式?

动态创建(xEventGroupCreate())适合快速开发,不用关心内存细节,但在内存小的设备(如单片机)上可能不可靠。
静态创建(xEventGroupCreateStatic())适合资源受限的嵌入式系统,比如单片机内存很小,必须精确控制内存使用,避免 “突然没内存” 的问题。

一句话总结

想简单快捷,不怕偶尔内存不够?用 xEventGroupCreate()。
设备内存小,要求必须创建成功?用 xEventGroupCreateStatic(&EventBuf)(记得自己准备内存)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络socket套接字(上)

目录 前言 1.Socket编程准备 1.理解源IP地址和目的IP地址 2.认识端口号 3.socket源来 4.传输层的典型代表 5.网络字节序 6.socket编程接口 2.Socket编程UDP 1.服务端创建套接字 2.服务端绑定 3.运行服务器 4.客户端访问服务器 5.测试 6.补充参考内容 总结 前言…

RK android14 Setting一级菜单IR遥控器无法聚焦问题解决方法

文章目录 前言 一、问题分析 1.1. 布局文件分析 1.2. Java代码 二、解决方法 2.1.移除冲突的滚动标志 2.2.解决有问题的初始化调用 2.3.完整补丁 前言 在Android系统Settings应用(packages/apps/Settings)的首页(SettingsHomepageActivity)中,存在一个 accessibility (无…

iOS 手势与控件事件冲突解决清单

总结一份「iOS 手势与控件事件冲突解决清单」,以后你遇到 UIButton / UITableView / UIScrollView 被手势拦截就能快速排查了:📌 iOS 手势与控件事件冲突常见解决办法1️⃣ cancelsTouchesInView👉 最常用,决定手势识别…

笔试——Day45

文章目录第一题题目思路代码第二题题目思路代码第三题题目思路代码第一题 题目 kanan和高音 思路 双指针遍历数组&#xff0c;更新左右端点并计算最大值 代码 #include<iostream> #include<vector> using namespace std;int main() {int n; cin >> n;vect…

nnDetection网络结构分析

基于 RetinaNet 框架扩展&#xff0c;核心用于处理 3D 体积数据&#xff08;如医学影像 CT/MRI&#xff09;&#xff0c;通过 “Encoder-Decoder-Head” 架构实现多任务学习。以下从整体框架、核心模块细节、技术特点、应用场景四个维度展开分析。一、整体框架概览首先通过表格…

Torch -- 卷积学习day4 -- 完整项目流程

完整项目流程总结1. 环境准备与依赖导入import time import os import numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import Dat…

MTK Linux DRM分析(七)- KMS drm_plane.c

一、简介在 Linux DRM&#xff08;Direct Rendering Manager&#xff09;子系统中&#xff0c;Plane&#xff08;平面&#xff09;代表了一个图像源&#xff0c;可以在扫描输出过程中与 CRTC 混合或叠加显示。每个 Plane 从 drm_framebuffer 中获取输入数据&#xff0c;并负责图…

OpenHarmony之 蓝牙子系统全栈剖析:从协议栈到芯片适配的端到端实践(大合集)

1. 系统架构概述 OpenHarmony蓝牙系统采用分层架构设计&#xff0c;基于HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架和系统能力管理&#xff08;System Ability&#xff09;机制实现。 1.1 架构层次 ┌─────────────────────────…

探索 Ultralytics YOLOv8标记图片

1、下载YOLOv8模型文件 下载地址&#xff1a;https://docs.ultralytics.com/zh/models/yolov8/#performance-metrics 2、编写python脚本 aaa.py import cv2 import numpy as np from ultralytics import YOLO import matplotlib.pyplot as pltdef plot_detection(image, box…

Matplotlib数据可视化实战:Matplotlib子图布局与管理入门

Matplotlib多子图布局实战 学习目标 通过本课程的学习&#xff0c;学员将掌握如何在Matplotlib中创建和管理多个子图&#xff0c;了解子图布局的基本原理和调整方法&#xff0c;能够有效地展示多个数据集&#xff0c;提升数据可视化的效果。 相关知识点 Matplotlib子图 学习内容…

【python实用小脚本-194】Python一键给PDF加水印:输入文字秒出防伪文件——再也不用开Photoshop

Python一键给PDF加水印&#xff1a;输入文字秒出防伪文件——再也不用开Photoshop PDF加水印, 本地脚本, 零会员费, 防伪标记, 瑞士军刀 故事开场&#xff1a;一把瑞士军刀救了投标的你 周五下午&#xff0c;你把 100 页标书 PDF 发给客户&#xff0c;却担心被同行盗用。 想加水…

开源 C++ QT Widget 开发(四)文件--二进制文件查看编辑

文章的目的为了记录使用C 进行QT Widget 开发学习的经历。临时学习&#xff0c;完成app的开发。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接&#xff1a; 开源 C QT Widget 开发&#xff08;一&#xff09;工程文件结构-CSDN博客 开源 C…

【密码学实战】X86、ARM、RISC-V 全量指令集与密码加速技术全景解析

前言 CPU 指令集是硬件与软件交互的核心桥梁&#xff0c;其设计直接决定计算系统的性能边界与应用场景。在数字化时代&#xff0c;信息安全依赖密码算法的高效实现&#xff0c;而指令集扩展则成为密码加速的 “隐形引擎”—— 从服务器端的高吞吐量加密&#xff0c;到移动端的…

2025-08-21 Python进阶2——数据结构

文章目录1 列表&#xff08;List&#xff09;1.1 列表常用方法1.2 列表的特殊用途1.2.1 实现堆栈&#xff08;后进先出&#xff09;1.2.2 实现队列&#xff08;先进先出&#xff09;1.3 列表推导式1.4 嵌套列表推导式2 del 语句3 元组&#xff08;Tuple&#xff09;4 集合&…

告别手工编写测试脚本!Claude+Playwright MCP快速生成自动化测试脚本

在进行自动化测试时&#xff0c;前端页面因为频繁迭代UI 结构常有变动&#xff0c;这往往使得自动化测试的脚本往往“写得快、废得也快”&#xff0c;维护成本极高。在大模型之前大家往往都会使用录制类工具&#xff0c;但录制类工具生成的代码灵活性较差、定位方式不太合理只能…

一款更适合 SpringBoot 的API文档新选择(Spring Boot 应用 API 文档)

SpringDoc&#xff1a;Spring Boot 应用 API 文档生成的现代化解决方案 概述 SpringDoc 是一个专为 Spring Boot 应用设计的开源库&#xff0c;能够自动生成符合 OpenAPI 3 规范的 API 文档。它通过扫描项目中的控制器、方法注解及相关配置&#xff0c;动态生成 JSON/YAML/HTML…

文献阅读 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 来自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React学习(九)

目录&#xff1a;1.react-进阶-antd-新增2.react-进阶-antd-删除选中1.react-进阶-antd-新增新增代码&#xff0c;跟需改的代码类似&#xff0c;直接copy修改组件代码进行修改userEffect可以先带着&#xff0c;没啥用A6组件用到的函数跟修改的也类似&#xff1a;这个useEffect函…

零基础从头教学Linux(Day 17)

三层交换机一、三层交换机的配置1.关于如何配置三层交换机&#xff0c;首先我们应该先创建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任务十四 推荐页面接口开发

一、接口准备 在对接qq音乐接口之前,首先要将之前的项目,一定要记得备份一份; 备份完成之后,首先要在vscode终端安装axios,这个是请求后端的工具,和之前的ajax一样,都是请求后端的工具。只不过axios更专业化,跟强大 至于qq音乐接口怎么获取,一般有两个途径,第一个是…