任务创建、信号量、消息队列、事件标志组、互斥信号量、软件定时器组等需要的 RAM 空间 都是通过动态内存管理从 FreeRTOSConfig.h 文件定义的 heap 空间中申请的。
动态内存管理介绍
FreeRTOS 支持 5 种动态内存管理方案,分别通过文件 heap_1,heap_2,heap_3,heap_4 和 heap_5 实现,这 5 个文件在 FreeRTOS 软件包中的路径是portable\MemMang。
用户创建的 FreeRTOS 工程项目仅需要 5 种方式中的一种。
五种动态内存管理方式简单总结如下,实际项目中,用户根据需要选择合适的:
- heap_1:五种方式里面最简单的,但是申请的内存不允许释放。
- heap_2:支持动态内存的申请和释放,但是不支持内存碎片的处理,并将其合并成一个大的内存块。
- heap_3:将编译器自带的 malloc 和 free 函数进行简单的封装,以支持线程安全,即支持多任务调 用。
- heap_4:支持动态内存的申请和释放,支持内存碎片处理,支持将动态内存设置在个固定的地址。 (推荐这个)pvPortMalloc() and vPortFree()).
- heap_5:在 heap_4 的基础上支持将动态内存设置在不连续的区域上。
动态内存和静态内存比较
动态内存 API 函数
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
走着的小站
本文地址: freertos学习笔记十二之动态内存管理
本文地址: freertos学习笔记十二之动态内存管理