FreeRTOS占用内存
Freeconfig.h 中 宏定义
宏 #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) )
该宏所定义的内存空间属于ZI-data范围(ZI-data 是指未初始化的全局变量及初始化值为0的全局变量)
FreeRTOS 自带的 申请内存API pvPortMalloc 是从configTOTAL_HEAP_SIZE所定义的内存中去申请;
<stdio.h> 文件中的malloc 函数是直接从SRAM堆中去申请内存,和全局变量等同
FreeRTOS 创建任务、消息队列及FreeRTOS的API函数都是从configTOTAL_HEAP_SIZE中申请内存
全局变量 | |
---|---|
初始化为非0值,不引用 | 占用RW-Data段 |
初始化为0 或 不初始化,引用 | 占用ZI-Data段 |
不初始化,不引用 | 不占用任何空间 |
FreeRTOS 堆空间
任务、队列、用户使用 pvPortMalloc() 分配的空间都从heap堆上面划分
API函数计算内存空间
xPortGetFreeHeapSize()
获取调用堆中空闲内存的大小,以Byte为单位 (heap_3 方案不能使用这个API)
求FreeRTOS 堆空间的最小空闲存储空间:
xPortGetMinimumEverFreeHeapSize()
返回FreeRTOS应用程序开始运行之后曾经存在的最小的未被分配的存储空间的字节数,该API仅在使用heap_4和heap_5时有效
求任务栈空间大小的API:
前提:在FreertosConfig.h中把 INCLUDE_uxTaskGetStackHighWaterMark 配置为1
uxTaskGetStackHighWaterMark()
该函数返回 所在任务自启动以来 的最小任务栈空间大小,单位为 字(求字节数 再 ×4 )
在一个任务中调用该API:
printf(" the min free stack size is %d \r\n",(int32_t)uxTaskGetStackHighWaterMark(NULL));
函数功能:打印出来该任务自启动起来最小剩余栈空间大小