FreeRtos 内存管理(二)

本篇讲heap_3.c、heap_4.c、heap_5.c

一、heap_3.c

heap_3.c里面简单粗暴,直接调用了标准c里的malloc 和 free

二、heap_4.c

xMinimumEverFreeBytesRemaining:heap的最小剩余量

xFreeBytesRemaining:heap剩余量

xBlockAllocatedBit:会被赋值为0x80000000, BlockLink_t中的xBlockSize最高位置1表示这篇内存被用过了

prvHeapInit

初始化完之后,链表数据结构:

prvInsertBlockIntoFreeList

heap_4相比heap_2多了一个内存整理的功能,会且仅会当两片内存首尾相等的时候,把这两片连续的内存拼接成一块,拼接方式分向前拼接和向后拼接

pvPortMalloc

vPortFree 

三、heap_5.c

heap_5和heap_4的内存管理算法一样,heap_5允许内存堆跨越多个不连续的内存段。

使用方法:先定义一个HeapRegion_t类型的数组,数组的最后一个元素必须为NULL,然后调用vPortDefineHeapRegions()接口初始化。

假设 现在有三个内存段:CCM、内部SRAM、外部SDRAM,起始分别为:0X10000000、0X20000000、0XC0000000,大小分别为:32KB、192KB、32MB,那么使用方法就如下:

HeapRegion_t xHeapRegions[] = { 
{ ( uint8_t * ) 0X10000000UL, 0x8000 }, //CCM内存,起始地址 0X10000000,大小 64KB 
{ ( uint8_t * ) 0X20000000UL, 0x30000 },  //内部 SRAM内存,起始地址 0X20000000, 
                                           //大小为 192KB 
{ ( uint8_t * ) 0XC0000000UL, 0x2000000},//外部 SDRAM内存,起始地址 0XC0000000
                                        //大小为 32MB
 { NULL, 0 } //数组结尾
};


vPortDefineHeapRegions((const HeapRegion_t *)xHeapRegions);

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值