FreeRTOS 内存管理(2)(依据韦东山文档,自学备份)

2.1为什么要自己实现内存管理

堆heap:一块空闲的内存,需要提供管理函数

                malloc:从堆中画出一块空间给程序员

                free:用完后,将其标志为“空闲”,可以再次使用

栈stack:从堆中分配一块空间给栈

2.2FreeRTOS中五种内存管理方式

补充:

2.2.1Heap_1

Heap_1:只实现了pvPortMalloc 没有实现vPortFree

程序不需要删除内核对象,使用heap_1:

~实现简单

~没有碎片时间

~在不能使用动态内存时候,可以使用和和heap_1

定义原理:首先定义一个大数组,对于pvPortMalloc调用的时候,从这个数组中分配空间

2.2.2Heap_2

Heap_2:新设计中用heap_4代替heap_2

在数组上分配内存,使用最佳匹配算法分配,支持vPortFree

但是与Heap_4相比,2并不会合并相邻的空间内存,会导致严重的“碎片化”问题

2.2.3.Heap_3

Heap_3:

2.2.4 Heap_4

Heap_4:利用大数组进行分配内存

使用首次适应算法并且将相邻的空闲内存合并成一个更大的空闲内存

2.2.5Heap_5

Heap_5:分配内存、释放内存的算法和4一样

但相比于4 ,5局限于管理一个大数组,可以管理多块、分割开的内存

在内存的地址可能不连续:使用Heap_5

如何指定一块内存

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

如何指定多块内存

HeapRegion_t xHeapRegions[]=

{
    {(uint8_t *)0x8000000ul,0x10000};//起始地址和大小
    {(uint8_t *)090000000ul,0xa0000};//起始地址和大小
    {null,0}//表示数组结束
};

2.3Heap相关函数

pvPortMalloc/vPortFree

xPortGetFreeHaepSize

xPortGetMinimumEverFreeHeapSize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值