打印
[其他ST产品]

FreeRTOS(基于STM32)——内存管理

[复制链接]
315|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qn7a12|  楼主 | 2022-12-31 22:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
内存管理的简介:

FreeRTOS基本不使用静态内存分配的方法,在FreeRTOS的应用中,一般不用C语言提供的mallo()和free()函数,选择执行效率更高的FreeRTOS中特有的内存管理方法,下面重点介绍heap_1和heap_4内存管理方法,在使用内存管理的时候,我们并不是调用API函数,而是使用FreeRTOS已经提供的heap_x.c文件




使用特权

评论回复
评论
qn7a12 2022-12-31 22:04 回复TA
———————————————— 版权声明:本文为CSDN博主「Vizio_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_50932441/article/details/127830352 
沙发
qn7a12|  楼主 | 2022-12-31 22:07 | 只看该作者
当有任务申请过较小的内存执行完毕并释放了这些小块内存,但是其他任务又无法使用这些小块内存,这些已释放的内存小块空间就会变成内存碎片,如果不及时解决这些问题,内存就会越来越少,导致系统崩溃,FreeRTOS中提供了第四种分配内存的方法,将所有的内存碎片连接起来形成一个大的内存空间,以便于下次使用。

使用特权

评论回复
板凳
qn7a12|  楼主 | 2022-12-31 22:08 | 只看该作者
五种内存的分配方法:

heap_1内存分配方法:

使用特权

评论回复
地板
qn7a12|  楼主 | 2022-12-31 22:09 | 只看该作者
内存申请函数:pvRortMalloc()

使用特权

评论回复
5
qn7a12|  楼主 | 2022-12-31 22:11 | 只看该作者
要进行八字节内存空间对齐的处理,否则会影响系统性能

使用特权

评论回复
6
qn7a12|  楼主 | 2022-12-31 22:12 | 只看该作者
内存释放函数:pvFree()  由于第一中内存管理方法不存在释放要求,所以内存释放函数没有执行操作

使用特权

评论回复
7
qn7a12|  楼主 | 2022-12-31 22:13 | 只看该作者
heap_2内存分配方法:

使用特权

评论回复
8
qn7a12|  楼主 | 2022-12-31 22:13 | 只看该作者
第二种内存管理方法可以使用在需要重复创建和删除的应用,但是会存在内存碎片的问题,适用于几乎所有任务需要的内存大小都差不多的情况。

使用特权

评论回复
9
qn7a12|  楼主 | 2022-12-31 22:15 | 只看该作者
内存块


使用特权

评论回复
10
qn7a12|  楼主 | 2022-12-31 22:16 | 只看该作者
heap_3内存分配方法:

只是简单封装了标准C库中的malloc()和free()函数,可以满足常用编译器,封装后的函数具有保护功能

使用特权

评论回复
11
qn7a12|  楼主 | 2022-12-31 22:16 | 只看该作者
heap_4内存分配方法:

可以分配,删除,回收内存空间,解决了内存碎片的问题

使用特权

评论回复
12
qn7a12|  楼主 | 2022-12-31 22:17 | 只看该作者
heap_5内存分配方法:

若使用heap_5,在调用API函数之前需要调用vPortDefineHeapRegions()来对内存堆做初始化处理,在内存堆未处理完成之前,不允许调用分配内存函数,允许跨越多个不连续的内存段,之前内存分配方法只允许一个内存堆,而heap_5具有多个内存堆,同样支持内存碎片的回收

使用特权

评论回复
13
qn7a12|  楼主 | 2022-12-31 22:17 | 只看该作者

使用特权

评论回复
14
Bowclad| | 2023-1-1 16:09 | 只看该作者
怎么封装的malloc和free啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

533

帖子

1

粉丝