FreeRTOS操作系统学习——内存管理

C库函数与FreeRTOS内存管理区别

在C语言的库函数中,有mallc、free等函数可以申请以及释放内存空间,那么这为什么不适用于FreeRTOS的内存管理呢?

  • 不适合用在资源紧缺的嵌入式系统中
  • 这些函数的实现过于复杂、占据的代码空间太大
  • 并非线程安全的(thread-safe)
  • 运行有不确定性:每次调用这些函数时花费的时间可能都不相同
  • 内存碎片化
  • 使用不同的编译器时,需要进行复杂的配置
  • 有时候难以调试

FreeRTOS内存管理

FreeRTOS内存管理方式主要依靠堆和栈来实现

  • 堆,heap,就是一块空闲的内存,需要提供管理函数
    • malloc:从堆里划出一块空间给程序使用
    • free:用完后,再把它标记为"空闲"的,可以再次使用
  • 栈,stack,函数调用时局部变量保存在栈中,当前程序的环境也是保存在栈中
    • 可以从堆中分配一块空间用作栈
      在这里插入图片描述

FreeRTOS内存管理方法比较

Heap_1

它只实现了pvPortMalloc,没有实现vPortFree。
如果你的程序不需要删除内核对象,那么可以使用heap_1
⚫ 实现最简单,在定义好的一个大数组中分配内存
⚫ 没有碎片问题
⚫ 一些要求非常严格的系统里,不允许使用动态内存,就可以使用heap_1
在这里插入图片描述

Heap_2

Heap_2之所以还保留,只是为了兼容以前的代码。新设计中不再推荐使用Heap_2。建议使用Heap_4来替代Heap_2,更加高效。 Heap_2也是在数组上分配内存,跟Heap_1不一样的地方在于:
⚫ Heap_2使用最佳匹配算法(best fit)来分配内存
⚫ 它支持vPortFree
⚫最佳匹配算法: 假设heap有3块空闲内存:5字节、25字节、100字节。pvPortMalloc 想申请20字节,找出最小的、能满足pvPortMalloc的内存:25字节 把它划分为20字节、5字节。返回这20字节的地址,剩下的5字节仍然是空闲状态,留给后续的pvPortMalloc使用 。
在这里插入图片描述
缺点:
在这里插入图片描述

Heap_3

在这里插入图片描述

Heap_4

跟Heap_1、Heap_2一样,Heap_4也是使用大数组来分配内存。 Heap_4使用首次适应算法(first
fit)来分配内存。它还会把相邻的空闲内存合并为一个更大的空闲内存,这有助于较少内存的碎片问题。

首次适应算法:
⚫ 假设堆中有3块空闲内存:5字节、200字节、100字节
⚫ pvPortMalloc 想申请20字节
⚫ 找出第1个能满足pvPortMalloc的内存:200字节
⚫ 把它划分为20字节、180字节
⚫ 返回这20字节的地址
⚫ 剩下的180字节仍然是空闲状态,留给后续的pvPortMalloc使用
在这里插入图片描述
在这里插入图片描述

Heap_5

Heap_5 分配内存、释放内存的算法跟Heap_4是一样的。 相比于Heap_4,Heap_5并不局限于管理一个大数组:它可以管理多块、分隔开的内存。 在嵌入式系统中,内存的地址可能并不连续,这种场景下可以使用Heap_5。既然内存时分隔开的,那么就需要进行初始化:确定这些内存块在哪、多大。

指定内存方法,使用结构体。

typedef struct HeapRegion 
{ 
uint8_t * pucStartAddress; // 起始地址 
size_t xSizeInBytes;       // 大小 
} HeapRegion_t; 

指定多块内存方法

 HeapRegion_t xHeapRegions[] = 
{ 
{ ( uint8_t * ) 0x80000000UL, 0x10000 }, // 起始地址0x80000000,大小0x10000 
{ ( uint8_t * ) 0x90000000UL, 0xa0000 }, // 起始地址0x90000000,大小0xa0000 
{ NULL, 0 } // 表示数组结束 
};

初始化内存

void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ); 

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

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

相关文章

小黑长沙特种兵归来,身体比较虚弱的js逆向烧脑之路:招标网搜索数据获取

通过有道翻译逆向的初步尝试,这次尝试一下招标网的数据获取感觉轻松了许多!!加油小黑黑 寻找接口地址(通过响应部分,推断出该部分为搜索数据获取接口) 复制curl,构造Python请求信息 进入https://curlconverter.com/python/,通过c…

HarmonyOS创建项目和应用—设置数据处理位置

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储,以及您的应用、终端用户的数据等。在您使用部分服务时,您是数据的控制者,数据将按照您设置的数据处理位置来存储在指定区域。 通常,您不需…

HTTPS如何保证数据传输的安全性 以及CA签发证书验签

暴力输出: 越看会越深入,睡前难以想通,后深入研究。得之。 有问题 请留言。 ----------追求内心的富足与平和。日行一善。 亓苏姑娘

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程,获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样,绿色反光部分(我的手忽略): 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到,选型很重要!

如何在2.2.1版Aduino IDE中开发ESP32

ESP32芯片集成了WIFI和蓝牙,而且关于生态也很不错,越来越多的学习者和开发者选择此类芯片,而不像用keil开发STM32或者51一样,ESP32虽然也有官方的ESP32-IDF开发软甲,但是经过我个人的实操体验,不适合小白或…

Blender和3ds Max哪个会是行业未来?

Blender和3ds Max都是很强大的三维建模和渲染软件,各有各的好处。选择哪个软件更好,要看你的需求、预算、技术水平以及行业趋势等因素。 Blender最大的优点是免费且开源,这对预算有限的个人和小团队来说很有吸引力。它有很多建模工具和功能&…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用,可能添加脚本后要手动拖动,这样如果有大量的脚本拖动也是不小的工作量 实例 例如:我的脚本需要添加一个Bone的列表,一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

GFP-GAN环境搭建推理测试

引子 近期,文生图,wav2lip很火,文生图,见识的太多,不多说了。wav2lip其通过语音驱动唇部动作并对视频质量进行修复,里面一般涉及到三个步骤,文本到语音转化,语音驱动唇部动作&#…

[XJTU-SY-BD]基础03 - 包络谱生成

1.分析结果 包络图是第三行。第一行水平时域信号,第二行垂直时域信号,第三行对第1行信号在故障频点包络计算后的结果。 上方是最终的视图。右下角我把光标对准了低频位置的那个故障峰,与理论值是一致的. 2.源码 2.1 测试例程源码 import …

Nature 研究亮点(Volume 626 Issue 8001, 29 February 2024)

文章目录 激光雕刻肥皂膜卵细胞的回收系统巴斯克语的起源产后抑郁症的治疗 激光雕刻肥皂膜 研究者:Haitao Xu 和 Yu Zhao,清华大学,北京。 发现:在特定条件下,可以使用激光在肥皂膜上进行雕刻。肥皂膜由洗涤剂分子&am…

护眼灯哪个牌子好?热门护眼台灯测评对比:明基/书客/柏曼,速度戳进来了解!

近年来,市场上出现了大量新型护眼台灯,让消费者在面对众多选择时感到困惑。在选购护眼台灯的时候,我们需要谨慎考虑,有些护眼台灯因为不合格,在使用过程中发热可能会产生有毒物质,对健康造成不良影响。那么…

Nginx使用—http基础知识

web访问流程 当我们在客户端通过浏览器输入网址的时候,这时候是访问不到服务器的, 先会去找到DNS解析服务器,DNS解析服务器返回IP地址, 客户端通过http协议向服务端发送请求,服务器响应请求并返回对应的资源给客户端&a…

TruEra

文章目录 关于 TruEra关于 TruLens 关于 TruEra TruEra Gen AI Observability and LLM Evaluation​ Monitor, evaluate, and debug your LLM and Gen AI apps. All part of Full Lifecycle AI Observability from TruEra. 官网:https://truera.comgithub : https…

旺泓_光感WH3620_数字RGBW-IR色彩传感器

由工采网代理的WH3620是一种基于颜色的光到数字转换器;它集光电二极管、电流放大器、模拟电路和数字信号处理器于一体;提供红、绿、蓝、白和红外光传感;能调节屏幕或灯光白平衡;各通道同时并行输出,因此在白光LED、CWF、TL84、D65…

本机虚拟机centos7设置固定ip

一、配置虚拟机网络 1、点击编辑 2、点击更改设置 记住子网地址:192.168.121.0 点击确定 二、配置虚拟机网络配置文件 首先进去root中,然后进入vim编辑器中 (1)su - root (2) vim /etc/sysconfig/network-scripts/ifcfg-ens33 在VIM编辑器中修改并添加…

约课小程序有哪些功能

​约课小程序为教育机构、教师和学生提供了便捷的预约和管理服务,有效提升了教学效率和用户体验。在这篇文章中,我们将介绍约课小程序常见的功能,帮助教育机构更好地了解如何利用小程序来提升服务质量和管理效率。 1. **课程预约功能**&…

【粉丝福利】一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

🌼一、前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景,在多项专业和学术基准测试中表现出的智力水平,不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xf…

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

dolphinscheduler试用(一)(边用边修bug。。。。create tenant error)

(作者:陈玓玏) 前提:部署好了dolphinscheduler,部署篇见https://blog.csdn.net/weixin_39750084/article/details/136306890?spm1001.2014.3001.5501 官方文档见:https://dolphinscheduler.apache.org/zh…