freertos的基础(二)内存管理:堆和栈


1. 堆(Heap)

定义

堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案(如 heap_1、heap_2、heap_4 等),开发者可以根据需求选择合适的内存管理策略。

作用

  • 用于动态分配内存,例如创建任务、队列、信号量等内核对象时,从堆中分配内存。

  • 堆的大小由开发者定义,通常在 FreeRTOS 配置文件(如 FreeRTOSConfig.h)中设置。

特点

  • 堆是全局共享的内存区域。

  • 动态分配的内存需要手动释放(取决于堆管理方案)。

malloc free(注意有 malloc一定要有free)

malloc:从堆里划出一块空间给程序使用

free:使用完,将这块内存空间标记为"空闲",可以再次使用


2. 栈(Stack)

定义

栈是每个任务独立拥有的内存区域,用于存储任务的局部变量、函数调用信息、中断上下文等。

作用

  • 用于任务运行时保存临时数据。

  • 每个任务都有自己的栈空间,栈的大小在创建任务时指定。

特点

  • 栈是任务私有的内存区域。

  • 栈空间不足会导致栈溢出,可能引发系统崩溃。


堆和栈的区别

特性 堆(Heap) 栈(Stack)
用途 动态内存分配(如任务、队列、信号量) 存储任务局部变量、函数调用信息
内存管理 全局共享,由 FreeRTOS 内存管理方案管理 每个任务独立拥有
分配方式 动态分配,手动释放(取决于堆管理方案) 自动分配,任务结束时自动释放
大小设置 在配置文件中定义堆大小 在创建任务时定义栈大小
溢出影响 可能导致内存分配失败 导致栈溢出,系统崩溃

总结

  • :用于动态内存分配,全局共享,由 FreeRTOS 管理。低地址,内存增长方向向上。

  • :用于任务运行时存储临时数据,每个任务独立拥有。高地址,内存增长方向向下。

相关推荐
承前智11 分钟前
Arduino1.8.19与stm32+ESP32的geek卸载及环境安装
stm32·单片机·嵌入式硬件
rundreamsFly13 分钟前
开源智能体 XAgent:企业级的智能化执行引擎,从任务描述到自动执行(内含CoPaw OpenClaw对比)
开源·xagent
全栈游侠16 分钟前
STM32F103XX 05-时钟配置分析与自举程序
stm32·单片机·嵌入式硬件
FIT2CLOUD飞致云17 分钟前
操作教程 | DataEase基于插件实现数据源与飞书多维表格的对接
数据分析·开源·数据可视化·dataease·bi
学嵌入式的小杨同学29 分钟前
STM32 入门封神之路(四):GPIO 实战 + 寄存器深度拆解 ——LED 控制 + 按键检测全流程(含位操作 + 面试题)
stm32·单片机·嵌入式硬件·硬件架构·硬件工程·智能硬件·嵌入式实时数据库
a1117761 小时前
堆叠式流程图编辑器(html 开源)
开发语言·前端·javascript·开源·编辑器·html·流程图
bkspiderx1 小时前
MQTT C/C++开源库全解析:从嵌入式到高并发场景的选型指南
c语言·c++·mqtt·开源·开源库
悟空码字2 小时前
一款免费开源的进销存 + 财务 + 生产 ERP 系统,支持 SaaS 模式与权限管理
开源·erp系统·saas系统
OctShop大型商城源码2 小时前
多用户开源商城源码下载_OctShop:构建电商系统的理想选择
开源·商城系统·多用户商城·多用户商城系统源码
开源能源管理系统2 小时前
告别厂商锁定!MyEMS 开源架构如何重构能源管理体系
重构·架构·开源