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 管理。低地址,内存增长方向向上。
-
栈:用于任务运行时存储临时数据,每个任务独立拥有。高地址,内存增长方向向下。
相关文章:
freertos的基础(二)内存管理:堆和栈
1. 堆(Heap) 定义 堆是 FreeRTOS 中用于动态内存分配的内存区域。FreeRTOS 提供了多种堆管理方案(如 heap_1、heap_2、heap_4 等),开发者可以根据需求选择合适的内存管理策略。 作用 用于动态分配内存,例…...
vue \n 换行不不显示
Vue 中,直接使用包含 \n 的字符串进行渲染时,换行符不会被识别为 HTML 的换行,因为 Vue 默认会将其视为普通文本。 对此提供两种解决办法 方法一:使用 v-html 指令替换 \n 为 <br> <template><div v-html"…...
GPT 系列论文精读:从 GPT-1 到 GPT-4
学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT,GPT-2,GPT-3 论文精读【论文精读】…...
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
Excel中双引号问题
背景: 从Excel中读取数据时,发现有的单元格读出来是一个双引号,有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…...
【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
Stream-Based Selective Sampling Stream-based selective sampling 是一种主动学习方法,在处理大量数据流时特别有用。它允许学习算法动态选择是否对当前数据实例进行标注(通过与 Oracle 交互)。此方法主要应用于流数据场景中,目…...
elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…...
SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
文章目录 1、Servlet 容器与线程池管理1.1 线程池的作用1.2 线程池的配置 2、HTTP 请求的线程隔离2.1 请求上下文和会话信息2.2 多线程处理的隔离性 3、 ThreadLocal 和线程上下文隔离3.1ThreadLocal的使用3.2 保证线程隔离性 4、Async异步任务的线程隔离4.1 异步任务的线程池4…...
【LLM】25.1.11 Arxiv LLM论文速递
25.1.10 12:00 - 25.1.11 12:00 共更新36 篇 —第1篇---- Supervision policies can shape long-term risk management in general-purpose AI models 🔍 关键词: 通用型人工智能,风险管理,监督政策,模拟框架 PDF链接 摘要: 通…...
单片机实物成品-012 酒精监测
项目介绍 本项目以软硬件结合的方式,选择 C 语言作为程序硬件编码语言, 以 STM32 单片机作为核心控制板,在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测,且对高浓度酒精采取强制干预和紧急预警,并将数据通过…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…...
跟我学C++中级篇——字节序
一、什么是字节序 在谈字节序前讲个小故事,在小说《格列佛游记》中,有两派势力为了吃鸡蛋的时候儿到底是先打破大的一端还是打破小的一端展开了战争,而且这场战争持续了很久。后来,1980年,Danny Cohen在论文"On …...
Linux网络编程5——多路IO转接
一.TCP状态时序理解 1.TCP状态理解 **CLOSED:**表示初始状态。 **LISTEN:**该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 **SYN_SENT:**这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时…...
Redis常见
Redis 事务 什么是 Redis 事务? 你可以将 Redis 中的事务理解为:Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。 Redis 事务实际开发中使用的非常少,功能比…...
提升 PHP 编码效率的 10 个实用函数
PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP 提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。 以下列出了 10 个可以显著加快您的编码过程的 PHP 函数…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
golang之数据库操作
1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…...
对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…...
Mac 删除ABC 输入法
参考链接:百度安全验证 Mac下删除系统自带输入法ABC,正解!_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态,可以删除 ;可能会对DNS 输入有影响,但是可以通过复…...
Windows上的B站桌面客户端终极指南:解锁高效视频播放新体验
Windows上的B站桌面客户端终极指南:解锁高效视频播放新体验 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在为浏览器标签页过多而烦恼吗&#…...
4大维度精通RPG Maker Decrypter:从解密原理到场景落地的全攻略
4大维度精通RPG Maker Decrypter:从解密原理到场景落地的全攻略 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mir…...
OpenClaw智能记账本:Qwen3-14b_int4_awq解析短信生成月度消费报告
OpenClaw智能记账本:Qwen3-14b_int4_awq解析短信生成月度消费报告 1. 为什么需要智能记账本? 每次月底看着银行卡余额叹气时,我都会陷入灵魂拷问:钱到底花哪儿了?手动记账坚持不了三天,银行App的消费分类…...
掌握Agentic RAG:大模型检索进阶实践,小白也能轻松收藏学习!
掌握Agentic RAG:大模型检索进阶实践,小白也能轻松收藏学习! 本文深入解析了Agentic RAG架构如何通过智能代理能力、动态任务规划和多步骤推理,超越传统RAG的被动模式,实现复杂问题的自主拆解与精准回答。以DeepSearch…...
Tensorflow-Cookbook高级特性解析:Partial Conv、Pixel Shuffle与Spectral Norm
Tensorflow-Cookbook高级特性解析:Partial Conv、Pixel Shuffle与Spectral Norm 【免费下载链接】Tensorflow-Cookbook Simple Tensorflow Cookbook for easy-to-use 项目地址: https://gitcode.com/gh_mirrors/te/Tensorflow-Cookbook Tensorflow-Cookbook是…...
Hunyuan-OCR-WEBUI效果实测:复杂表格识别与字段抽取案例展示
Hunyuan-OCR-WEBUI效果实测:复杂表格识别与字段抽取案例展示 1. 引言 在数字化转型浪潮中,纸质文档的电子化处理一直是企业办公自动化的关键环节。传统OCR技术虽然能够完成基本的文字识别,但在面对复杂表格、多语言混合、低质量扫描件等实际…...
Windows下用mklink命令迁移谷歌浏览器到D盘(附详细步骤图)
Windows系统迁移谷歌浏览器的终极方案:mklink命令深度解析 你是否也遇到过C盘空间告急的窘境?作为开发者日常必备工具的谷歌浏览器,随着缓存和扩展程序的不断累积,往往会占据大量系统盘空间。本文将带你深入探索Windows系统中mkli…...
WSL2+VSCode+Github Copilot开发环境配置全指南(避坑版)
WSL2VSCodeGithub Copilot开发环境配置全指南(避坑版) 在当今的开发环境中,Windows Subsystem for Linux 2 (WSL2) 已经成为许多开发者的首选工具,它完美结合了Windows的易用性和Linux的强大功能。而Visual Studio Code (VSCode)…...
飞书集成全攻略:OpenClaw+Qwen3-4B-Thinking打造智能工作台
飞书集成全攻略:OpenClawQwen3-4B-Thinking打造智能工作台 1. 为什么选择OpenClawQwen3-4B-Thinking组合? 去年夏天,当我第一次尝试用AI自动化处理会议纪要时,经历了从兴奋到沮丧的全过程。当时使用的是某商业SaaS方案ÿ…...
NanoHttpd POST 请求中文乱码问题解决方案
解决方案 推荐做法:服务器端修正 在请求处理的 serve() 方法中,在调用 parseBody() 之前,显式确保 Content-Type 包含 charsetUTF-8: Override public Response serve(IHTTPSession session) {Map<String, String> files n…...
