FreeRTOS学习笔记-基于stm32(14)内存管理
一、FreeRTOS 内存管理简介
FreeRTOS有两种方法来创建任务,队列,信号量等,一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。
我们在移植FreeRTOS时可以看到在 FreeRTOS 源码中有 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c 五种内存分配方法,我们当时移植的是 heap_4.c。标准 C 库中的 malloc()和 free() 也可以实现动态内存管理,但不是线程安全的,且执行时间不确定,效率低下等等。当内核需要 RAM 的时候可以使用 pvPortMalloc() 来替代 malloc() 申请内存,不使用内存的时候可以使用 vPortFree()函数来替代 free()函数释放内存。
二、内存碎片
内存碎片指的是小块的、碎片化的内存。
如图在分配前的内存堆是完整的。在第一次分配中分配了100B,10B,80B,80B四块内存。随后又释放掉一块10B和80B的内存,虽然最左边80B的内存被释放掉了,但无法与左边的剩余内存进行合并,并且如果下次分配的内存小于80B仍可在这块内存上继续切割。这样会导致内存在多次申请和释放内存后产生很小无法使用的内存碎片。

三、 内存分配方法比较
heap_1:分配简单时间确定;但只能申请内存不能释放内存;
heap_2:可申请可释放;但时间不定,会产生碎片;
heap_3:直接调用C库的malloc和free,简单;但速度慢,时间不定;
heap_4:相邻空间可合并,减少内存碎片产生;但时间不定;
heap_5:可管理多个非连续内存区域的heap_4;但时间不定。
四、内存管理相关API函数
| 函数 | 描述 |
| void*pvPortMalloc(size t xWantedSize) | 申请内存 |
| void vPortFree(void * pv) | 释放内存 |
| size t xPortGetFreeHeapSize(void) | 获取当前空闲内存的大小 |
void *pvPortMalloc( size_t xWantedSize):
参数:xWantedSize:申请的内存大小,以字节为单位;
返回值:返回一个指针,指向已分配大小的内存;如果申请内存失败,则返回NULL。
void vPortFree( void * pv):
参数:*pv:指针指向一个要释放内存的内存块。
size t xPortGetFreeHeapSize( void ):
返回值:返回当前剩余的空闲内存大小。
相关文章:
FreeRTOS学习笔记-基于stm32(14)内存管理
一、FreeRTOS 内存管理简介 FreeRTOS有两种方法来创建任务,队列,信号量等,一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。 我们在移植FreeRTOS时可…...
关于Lambert W函数
来源:R. M. Corless, G. H. Gonnet, D. E. G. Hare, D. J. Jeffrey, and D. E. Knuth, “On Lambert’s W function,” Adv. Comput. Math., vol. 5, pp. 329–359, May 1996, doi: 10.1007/BF02124750. 摘要 Lambert W函数被定义为函数 w ↦ w e w w \mapsto we^…...
【免杀】C2远控-APC注入-进程镂空
目录 进程镂空&傀儡进程(主要过内存扫描)代码 傀儡进程演示如何上线上线演示 APC注入&进程欺骗(主要过内存扫描)同步调用与异步调用代码演示 进程镂空&傀儡进程(主要过内存扫描) 进程镂空(Pro…...
20240611 讯飞JAVA工程师(研发经理岗)面试
1.线程安全的集合类 在Java中,一些线程安全的集合类有Stack、Vector、Properties、Hashtable等 2.线程池中execute和submit的区别 1)参数及返回值不同 excute只能提交Runnable,无返回值 submit既可以提交Runnable,返回值为null&am…...
【研发日记】Matlab/Simulink软件优化(三)——利用NaNFlag为数据处理算法降阶
文章目录 前言 背景介绍 初始算法 优化算法 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 见《【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法》 背景介绍 在一个嵌入式软件开发项目中,需要开…...
go语言接口之http.Handler接口
package httptype Handler interface {ServeHTTP(w ResponseWriter, r *Request) }func ListenAndServe(address string, h Handler) error ListenAndServe函数需要一个例如“localhost:8000”的服务器地址,和一个所有请求都可以分 派的Handler接口实例。它会一直运…...
R语言 | 使用最简单方法添加显著性ggpubr包
本期教程原文:使用最简单方法添加显著性ggsignif包 本期教程 获得本期教程代码和数据,在后台回复关键词:20240605 小杜的生信笔记,自2021年11月开始做的知识分享,主要内容是R语言绘图教程、转录组上游分析、转录组下游…...
【Linux】shell脚本变量——系统变量、环境变量和用户自定义变量
系统变量 系统变量是由系统预设的,它们通常在系统启动时被加载,并对所有用户和所有shell实例都有效。这些变量通常控制着系统的行为和配置,例如PATH(命令搜索路径)、HOME(用户主目录)等。系统变…...
QWidget 属性——windowTitle·windowIcon·qrc
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:QT ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、windowTitle二、windowIcon三、qrc 一、windowTitle windowTitle 是一个通常用于表示窗口标题…...
深入理解rtmp(一)之开发环境搭建
深入理解rtmp(一)之开发环境搭建 手机直播在15年的时候突然火起来,随着花椒,映客等出现,直播一下就出现在了风口,各个公司针对直播的战斗迅速打响,战斗过程比较短暂,随着许多公司的退出和死去,手机直播行业趋于稳定,直播服务时长也被传统的CDN厂商牢牢占据,后面大家又把精力投…...
java常用面试基础题
&与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件…...
互联网摸鱼日报(2024-06-11)
互联网摸鱼日报(2024-06-11) 36氪新闻 雅诗兰黛,胆子也太大了 苹果WWDC终极前瞻:5大看点20大AI新功能,库克不能输的一战 瑞士清洁科技公司Enerdrape开发预制地热板,回收城市地下空间的浅层地热能和废热用于建筑物制热或制冷 | …...
中介子方程十二
X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrXkXtXyX$XpXVX$XVXpX$XyXtXkXrXiXα…...
SLT简介【简单介绍SLT】
SLT简介 在c的学习当中STL的学习是一个很重要的一环,但是STL又是一个庞大的章节,因此这里我们先简单介绍一下STL,有助于后面我们对STL的学习,这里就是做一个简单的介绍,并无干货。 1.什么是STL STL(standard templa…...
vue实现pdf下载——html2canvas
html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用(页面已经…...
安装docker+mysql的一些坑
yum -y install docker 提示missing signature 参考这里 https://www.8a.hk/news/content/8235.html 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装…...
React Native采集数据离线存储、网络状态监控、加密上传、鉴权
在无网络环境下进行数据采集并在有网络时上传至服务器,同时确保数据的鉴权和加密,这一需求需要考虑多方面的实现细节。无论您选择原生开发还是使用React Native(甚至Expo),以下是如何实现这一需求的具体步骤和建议。 …...
网络数据库后端相关面试题(其三)
18, 传输控制协议tcp和用户数据报协议udp有哪些区别 第一,tcp是面向字节流的,基本的传输单位是tcp报文段;而udp是面向报文的,基本传输单位是用户数据报。 第二, tcp注重安全可靠性,连接双方在…...
Hadoop之HDFS分布式文件系统
HDFS简介 Hadoop Distributed File System (HDFS): HDFS 是 Hadoop 的分布式文件系统,它设计用于存储大量数据,并提供 高吞吐率的数据访问,通过将数据分块存储在多个节点上,实现数据的冗余存储和容错。 HDFS重要概念 HDFS 通过统一的命名空间目录树来定位文件; 另外,它…...
插入删除单链表指定结点-偷天换日法
王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->nextNULL; So *q NULL; q->data就是错误的,我认为加个判断就行 加个判断即可 /*看着是删除q了,从结果上看就是把p删除了 偷天换日法*/ bool DeleteNode(LNod…...
3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化
3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 问题场景:当数字化教学遇上学习需求冲突 "…...
UE5项目GPU瓶颈卡顿?手把手教你用GPU Visualizer揪出渲染性能元凶
UE5项目GPU瓶颈卡顿?手把手教你用GPU Visualizer揪出渲染性能元凶 当你的UE5项目在真机测试时突然掉帧到30fps以下,而编辑器里明明运行流畅——这种"开发环境正常,实机表现崩盘"的困境,相信每个UE开发者都经历过。上周我…...
从零开始掌握30+种路径规划算法:可视化学习与实战指南
从零开始掌握30种路径规划算法:可视化学习与实战指南 【免费下载链接】PathPlanning Common used path planning algorithms with animations. 项目地址: https://gitcode.com/gh_mirrors/pa/PathPlanning 你是一个文章写手,你负责为开源项目写专…...
Element React:革新性UI组件库助力React开发者高效构建企业级应用界面
Element React:革新性UI组件库助力React开发者高效构建企业级应用界面 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 在现代Web应用开发中,界面构建往往占据了开发者大量时间与精力。El…...
League-Toolkit启动故障系统性排查方案:从现象到根治的完整解决路径
League-Toolkit启动故障系统性排查方案:从现象到根治的完整解决路径 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 问…...
保姆级教程:在Win10上用Docker Desktop搞定Dify,再接入本地DeepSeek模型
保姆级教程:在Win10上用Docker Desktop搞定Dify,再接入本地DeepSeek模型 如果你是一位Windows 10用户,同时对AI应用开发充满兴趣,那么这篇教程就是为你量身定制的。我们将一步步带你完成Dify平台的部署,并将其与本地运…...
AI写专著必备:优质工具大盘点,全方位提升专著撰写效率
撰写学术专著时,研究者需要在“内容的深度”和“覆盖的广度”之间找到一个恰当的平衡,而这正是许多人面临的主要难题。从深度出发,专著的核心论点需要具备足够的学术分量,不仅要清楚解答“是什么”,还应该深入探讨“为…...
信息发布平台毕设实战:从零构建高可用内容分发系统
背景痛点:为什么你的毕设平台总感觉“差点意思”? 很多同学在做“信息发布平台”这类毕业设计时,往往只关注功能实现,忽略了背后的架构和性能问题。结果就是,一个看似功能齐全的平台,一旦面临稍微复杂的场景…...
OpenClaw+nanobot镜像:3步配置QQ聊天机器人触发AI任务
OpenClawnanobot镜像:3步配置QQ聊天机器人触发AI任务 1. 为什么选择OpenClawnanobot组合? 去年冬天,当我第一次尝试用QQ机器人自动处理群消息时,经历了漫长的环境配置地狱。直到发现星图平台的nanobot镜像,这个开箱即…...
用 AI 养了一个“女朋友“:陪聊 + 自拍功能完全指南
免责声明:Clawra 是 AI,不会真的爱你。但她会在你孤独的深夜发一张咖啡馆自拍,这已经比很多人强了。 她是谁? Clawra 是内置在 im-claude 里的 AI 人设角色,通过 Telegram Bot 和你聊天。你也可以给她其他的名字&…...
