FreeRTOS源码分析之heap2.c .
来源:互联网 发布:理财 大数据 组合 编辑:程序博客网 时间:2024/06/06 07:08
heap2和heap1一样,都是从.bss段定义一个数组,然后进行内存管理。
heap2比heap1厉害得地方在于维护了一个空闲块链表,从而实现既可以分配内存又可以释放内存。
BlockLink_t空闲块结构体:
节点结构体如下,pxNextFreeBlock表示下一个空闲块地址,xBlockSize表示该空闲块大小。
prvHeapInit函数:
和heap1一样,首先要进行自节对齐。但是heap2维护了一个空闲块链表,因此要对链表进行初始化。刚开始的时候,只有一个空闲块,指向ucHeap字节对齐后的地址pucAlignedHeap,大小为ucHeap字节对齐后的整个剩余空间configADJUSTED_HEAP_SIZE
pvPortMalloc函数:
在pvPortMalloc函数的源码中能够发现prvHeapInit函数是不需要主动调用的。在第一次使用pvPortMalloc函数时,会被自动调用。
和heap1中pvPortMalloc函数一样,要对xWantedSize进行字节对齐
然后就是,从空闲块链表中找到一个大小合适的空闲块出来。
将空闲块分配出去。
如果该空闲块远远大于想要分配的内存(远远大于的标准为两个空闲块结构体大小),则要把大于的部分分割出来,继续加入到空闲块链表中。并且更新剩余空间大小。
prvInsertBlockIntoFreeList函数:
prvInsertBlockIntoFreeList函数做的事情,就是将一块空闲块按从大到小的顺序插入到空闲链表中。
vPortFree函数:
heap2是可以释放内存的,通过把要释放的空间重新加入空闲链表来达到。按照从大到小的顺序进行插入,并没有将相邻空闲块合并,这使得空闲空间越来越碎,最终没有可用空间。
xPortGetFreeHeapSize函数:
xPortGetFreeHeapSize函数用来返回剩余空闲空间大小。
- FreeRTOS源码分析之heap2.c .
- FreeRtos heap2源码分析
- FreeRTOS源码分析之heap1.c
- FreeRTOS源码分析之heap3.c
- FreeRTOS源码分析之heap4.c
- FreeRTOS 源码分析
- FreeRtos heap1源码分析
- FreeRtos heap3源码分析
- FreeRtos heap4源码分析
- FreeRtos heap5源码分析
- FreeRTOS源码分析-异常处理
- FreeRTOS源码分析-代码结构
- FreeRTOS 内存管理源码分析
- FreeRTOS timer定时器源码分析
- 关于FreeRTOS源码分析的论坛
- FreeRTOS的Tickless低功耗源码分析
- Freertos消息队列接收源码xQueueGenericReceive分析
- FreeRTOS之源码及移植解析
- this详解
- FreeRTOS源码分析之heap1.c
- JIRA增加自定义导航菜单项---普通用户查看所有项目
- 【IMWeb训练营作业】Vuejs 简单使用
- 俄罗斯黑客在暗网销售廉价的Ransomware服务
- FreeRTOS源码分析之heap2.c .
- Linux常用命令
- SparkSQL之查询,过滤
- FreeRTOS源码分析之heap3.c
- tp 实现无限回复评论功能
- 存储过程5
- OC copy内存管理语义及 copy mutableCopy
- android:ellipsize的使用
- java并发编程实战读书笔记