FreeRTOS学习笔记>内存管理

ops/2024/10/18 7:45:51/

1. 内存的概念与分类

在计算系统中,内存用于存储变量和中间数据。系统的内存可以分为两种:

  • 内部存储空间(RAM):通常指随机存储器,数据存取速度快,可以随机访问,但掉电后数据会丢失。
  • 外部存储空间:例如硬盘或闪存,数据即使在掉电后也能保存。

在嵌入式系统中,我们主要关注内部存储空间(RAM)的管理,这就是内存管理的核心内容。

2. FreeRTOS 内存管理的设计理念

FreeRTOS 操作系统将内核与内存管理功能分开,实现了灵活的内存管理方式。内核仅规定了必要的内存管理函数原型,而不限定具体的实现方式。FreeRTOS 提供了多种内存分配算法(策略),但它们共享统一的上层接口(API),从而允许开发者根据实际需求选择最合适的内存管理策略。

3. 动态内存分配 vs. 静态内存分配

  • 静态内存分配:在编译时确定内存分配,适用于高可靠性系统,但内存利用效率较低。
  • 动态内存分配:在运行时根据需要动态分配内存,适用于普通业务系统,内存利用效率高,但可能会导致碎片化问题。

嵌入式系统通常根据应用场景的特点选择内存分配方式。

4. 为什么不用 C 标准库的内存管理函数?

虽然在普通计算机系统中常用 malloc()free() 进行动态内存分配,但在嵌入式实时操作系统中使用这些函数却可能带来以下问题:

  • 小型嵌入式系统中 RAM 容量有限,malloc()free() 可能不适用。
  • 这些函数的实现通常占用较大的代码空间。
  • 它们的执行时间不确定,无法保证实时性。
  • 可能导致内存碎片的产生。
  • 链接器配置复杂,可能覆盖其他变量的内存,增加调试难度。

因此,FreeRTOS 提供了专用的内存管理机制,以满足嵌入式实时系统对确定性和效率的要求。

5. FreeRTOS 的内存管理策略

FreeRTOS 的内存管理模块负责管理系统内存资源,涵盖内存的初始化、分配和释放。为了满足不同嵌入式系统的需求,FreeRTOS 提供了多种内存分配算法,每种算法适用于特定的应用场景。

FreeRTOS V9.0.0 提供了五种内存管理算法:

  • heap_1.c:最简单的内存分配策略,不支持内存释放,适用于固定内存需求的系统。
  • heap_2.c:允许内存释放,但可能产生碎片。
  • heap_3.c:封装了标准的 malloc()free(),适用于那些需要使用标准库的系统。
  • heap_4.c:更复杂的内存分配策略,支持合并相邻的空闲内存块,减少碎片。
  • heap_5.c:支持多块内存区域的分配,适用于需要灵活内存管理的系统。

这些内存管理算法的源文件位于 FreeRTOS\\\\Source\\\\portable\\\\MemMang 目录下,开发者可以根据需求选择适合的算法。

6. 总结

FreeRTOS 内存管理模块通过高效的内存分配与释放机制,最大化内存利用率,并减少内存碎片的产生。开发者可以根据应用需求选择合适的内存管理策略,从而确保嵌入式系统在运行过程中稳定高效。

欢迎指出博客中的错误,如果你觉得对你有用,记得点赞三连,有问题可留言,会及时回复


http://www.ppmy.cn/ops/100376.html

相关文章

es、kibana及分词器的安装

文章目录 1、搜索引擎2、为什么使用新型搜索?3、底层原理:倒排索引4、底层API5、你使用了什么分词器?6、ElasticSearch安装6.1、准备目录并授予权限6.2、制作配置文件6.3、初始化es容器6.4、重置es用户密码6.5、安装中文分词器6.5.1、 把资料…

[Hive]四、Hive On Tez

G:\Bigdata\Projects\大数据电商数仓项目(含2.0、3.0版本)\数仓项目实战V2.0\word版资料 1. Hive集成引擎Tez Tez是一个Hive的运行引擎,性能优于MR。为什么优于MR呢?看下图。 用Hive直接编写MR程序,假设有四个有依赖关系的MR作业,上图中,绿色是Reduce Task,云状表示写…

基于Springboot的多功能智能点餐小程序/基于微信小程序的点餐系统

摘要 计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量。优秀的智能点餐系统能够更有效管理用户智能点餐业务规范,帮助管理者更加有效管理用户智能点餐,可以帮助提高克服人工管理带来的错误等不利因素。…

在银河麒麟服务器V10上源码编译安装mysql-5.7.42-linux-glibc2.12-x86_64

在银河麒麟服务器V10上源码编译安装mysql-5.7.42-linux-glibc2.12-x86_64 一、卸载MariaDB(如果已安装)二、下载MySQL源码包并解压三、安装编译所需的工具和库四、创建MySQL的安装目录及数据库存放目录五、编译安装MySQL六、配置MySQL七、设置环境变量八…

AI大模型编写多线程并发框架(六十二):限流和并发度优化

系列文章目录 文章目录 系列文章目录前言一、项目背景二、第三轮对话-补充异步执行代码三、第四轮对话-增加限流器四、第五轮对话-抽取限流器接口五、第六轮对话-修改并发度三、参考文章 前言 在这个充满技术创新的时代,AI大模型正成为开发者们的新宠。它们可以帮助…

回归预测|基于北方苍鹰优化核极限学习机的数据预测Matlab程序NGO-KELM 多特征输入单输出

回归预测|基于北方苍鹰优化核极限学习机的数据预测Matlab程序NGO-KELM 多特征输入单输出 文章目录 一、基本原理1. 基本原理核极限学习机(KELM) 2. NGO-KELM回归预测流程1. 数据预处理2. 核极限学习机(KELM)模型构建3. 北方苍鹰优…

Spring IoCDI

1. IoC & DI ⼊⻔ 在前⾯的章节中, 我们学习了Spring Boot和Spring MVC的开发, 可以完成⼀些基本功能的开发了, 但是什么是Spring呢? Spring, Spring Boot 和SpringMVC⼜有什么关系呢? 咱们还是带着问题去学习. 我们先看什么是Spring 1.1 Spring 是什么? …

openCV 报错 Layout of the output array img is incompatible with cv::Mat, 错误原理与解决

当绘制使用ndarry表示的图像的边框.以及其他的绘制操作,均会发生此错误 错误如下 cv2.rectangle(cv_img, (x1, y1), (x2, y2), color, 2) cv2.error: OpenCV(4.10.0) :-1: error: (-5:Bad argument) in function rectangle > Overload resolution failed: > - Layout o…