FreeRTOS Heap_1、Heap_2、Heap_3、Heap_4、Heap_5的区别

FreeRTOS提供了五种内存管理的方式,下文将对以下五种内存分配进行说明:

1.Heap_1

Heap_1 堆大小通过FreeRTOSConfig.h中的configTOTAL_HEAP_SIZE定义设置,在源码通过数组的总大小configTOTAL_HEAP_SIZE(bytes)定义设置,允许使用pvPortMalloc(),但没有实现vPortFree()。

当调用pvPortMalloc()时,heap_1分配方案将一个简单数组细分为更小的块。这个数组被称为FreeRTOS堆。

每个创建的任务都需要从堆中分配一个任务控制块(TCB)和一个堆栈。下图演示了heap_1如何将简单数组细分为创建任务。

 如图可见,Heap_1不能删除栈区,随着不断申请内存,有栈溢出风险,在通常应用中不建议使用此种内存分配方法。

2.Heap_2

Heap_2 堆大小通过FreeRTOSConfig.h中的configTOTAL_HEAP_SIZE定义设置,在源码通过数组的总大小configTOTAL_HEAP_SIZE(bytes)定义设置,允许使用pvPortMalloc()和vPortFree(),但是Heap_2不会将相邻的块合并成一块,因此更容易碎片化。

每个创建的任务都需要从堆中分配一个任务控制块(TCB)和一个堆栈。下图演示了heap_2如何将简单数组细分为创建任务。如1中创建了三个Task;2中删除中间Task;2->3创建一个和删除task大小一样的task;2->4创建了一个比之前删除的task堆更大的task。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值