近几年来,FreeRTOS在嵌入式操作系统排行榜中一直位居前列,作为开源的嵌入式操作系统之一,它支持许多不同架构的处理器以及多种编译工具链,具有轻量级、容易移植和使用的特点。本篇文章将会对FreeRTOS提供的几种内存分配策略进行介绍,FreeRTOS允许开发者根据自己的项目实际需要选择不同的内存分配策略或者自定义分配内存策略。
一、FreeRTOS内存分配源码
FreeRTOS在创建任务、队列、互斥量、信号量、软件定时以及事件组的时候需要从RAM中分配内存,源码目录:FreeRTOSv9.0.0\FreeRTOS\Source\portable\MemMang下提供了5中内存分配机制的实现,本文将会讲解heap1.c,heap2.c, heap4.c三种。
二、配置FreeRTOS内存大小
在FreeRTOSConfig.h头文件中宏configTOTAL_HEAP_SIZE用于配置内核可用的RAM大小:
在heap1.c, heap2.c, heap3.c源文件中,分配的内存实际上是用一个静态数组ucHeap来表示:
在MDK编译后生成的.map文件里面可以查看ucHeap符号信息:
ucHeap属于RW数据,在RAM中运行时的地址是0x