FreeRTOS 内存管理

一、简介

FreeRTOS提供5中Heap管理方式,分别在5个.c文件中实现

  • Heap_1.c
  • Heap_2.c
  • Heap_3.c
  • Heap_4.c
  • Heap_5.c
    五个源文件中,提供都提供Heap管理功能,接口相同,但是实现方式不同,特性也不同。下面将介绍5种内存管理的方式,以便根据不同需要选择。

二、Heap配置

移植FreeRTOS过程中,需要确定几项Heap相关的配置参数

  • 对齐方式 portBYTE_ALIGMENT
  • Heap空间 configTOTAL_HEAP_SIZE
  • 申请失败hook configUSE_MALLOC_FAILED_HOOK

三、Heap实现方式

1. Heap_1

源文件中注释说明了,Heap_1提供的方式仅支持alloct内存,不支持Free。由于汽车电子软件不允许动态申请释放内存,因此选择Heap_1
在这里插入图片描述
实现方式:直接在Heap数组中往后移指定长度,然后将前面的空间返回

2. Heap_2

Heap提供了Free机制,支持申请的内存释放之后,重新申请。但是不支持收集碎片化的内存。
在这里插入图片描述
Heap_2采用最佳匹配算法(best fit algorithm)实现,每次申请内存都会找到最小的block地址。Heap_2支持Free内存,但是不支持收集碎片化内存
寻找最小的Block

3. Heap_3

Heap_3的申请释放内存是利用malloc和free函数实现的,在这基础上增加了对申请失败的hook函数。
需要注意,由于malloc函数并不是从FreeRTOS指定的heap数据中申请的内存,而是从编译链接中定义的heap中获得。因此此种情况下不需要关注configTOAL_HEAP_SIEZ。
在这里插入图片描述

4. Heap_4

Heap_4 采用快速匹配算法(first fit algorithm),对比Heap_2。能将碎片化的内存收集整理成一个单独的block。同时也增加了一个接口:

 void vPortGetHeapStats(HeapStats_t *pHeapStats)

在这里插入图片描述

5. Heap_5

Heap_5也采用快速匹配算法(first fit algorithm)和内存合并算法,并且允许heap跨越多个不相邻的内存区域。
Heap_5 增加了一个接口:

void vPortDefineHeapRegions(const HeapRegion_t * const pxHeapRegions)

在申请内存之前,必须调用此接口。
在这里插入图片描述
如图中所示,存在首地址为0x80000000UL 长度为 0x10000和首地址0x90000000UL 长度为0xa0000两段内存空间。
通过调用接口vPortDefineHeapRegions,来初始化内存

四、参考链接

链接: FreeRTOS官方说明.

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值