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

FreeRTOS,事件标注组创建,xEventGroupCreate、xEventGroupCreateStatic

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.dtcms.com/a/341974.html

相关文章:

  • 【自记】Power BI 中 CALCULATETABLE 第二个及后续参数支持的两种类型说明
  • 基于混合注意力网络和深度信念网络的鲁棒视频水印技术基础理论深度解析
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设-理实虚一体化实践
  • 【lucene】lucene常用查询一览
  • 一键去除 Windows 图标角标(小箭头、盾牌与双箭头)
  • JeeSite V5.13.0 发布,升级 Spring Boot 3.5,Cloud 2025,AI 1.0,Vite 7
  • ORACLE中如何批量重置序列
  • 如何保证数据库和缓存的一致性?
  • 强化学习中的重要性采样:跨分布复用样本的核心技术
  • 大模型0基础开发入门与实践:第8章 “大力出奇迹”的哲学:大语言模型的核心技术揭秘
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设方案
  • 嵌入式软件典型架构:层次化模式 vs 递归模式
  • Java Main无法初始化主类的原因与解决方法(VsCode工具)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 智慧工厂的 “隐形大脑”:边缘计算网关凭什么重构设备连接新逻辑?
  • 编程刷题-资料分发1 图论/DFS
  • Kotlin-基础语法练习二
  • Android面试指南(四)
  • [新启航]机械深孔加工质控:新启航方案用激光频率梳破解 130mm 深度遮挡瓶颈
  • 闲聊汽车芯片的信息安全需求和功能
  • C# NX二次开发:反向控件和组控件详解
  • 智慧巡检新标杆:智能移动机器人——电力行业的守护者
  • 【数据结构】树与二叉树:结构、性质与存储
  • 解码欧洲宠物经济蓝海:跨境电商突围的战略逻辑与运营范式
  • Vue2+Vue3前端开发_Day5
  • 【PZ-A735T-KFB】璞致fpga开发板 Artix-7 系列之PA-Starlite-初学入门首选 开发板用户手册
  • 《Python 整数列表分类:巧妙将负数移到正数前面》
  • 力扣hot100:无重复字符的最长子串,找到字符串中所有字母异位词(滑动窗口算法讲解)(3,438)
  • LeetCode每日一题,2025-08-21
  • C++——C++重点知识点复习2(详细复习模板,继承)