freeRTOS 内存管理方法4
时间: 2023-12-10 14:06:14 浏览: 95
FreeRTOS的内存管理方法4是通过增加一个内存合并算法来提高内存使用效率。这种方法与前文介绍的第二种方法相似,使用一个大数组来管理内存,定义为`static uint8_t ucHeap\[configTOTAL_HEAP_SIZE\]`。在这种方法中,有三个关键函数用于内存分配和释放。首先是`pvPortMalloc`函数,用于分配内存空间。它接受一个参数`xWantedSize`,表示需要分配的内存大小。然后是`vPortFree`函数,用于释放内存空间。它接受一个参数`pv`,表示要释放的内存指针。最后是`prvInsertBlockIntoFreeList`函数,用于将相邻的小的空闲内存块合并成一个大块,以避免内存泄露。释放内存的具体实现如下所示:
```c
void vPortFree(void *pv) {
if (pv) {
vTaskSuspendAll();
{
free(pv);
traceFREE(pv, 0);
}
(void)xTaskResumeAll();
}
}
```
这个函数首先检查传入的内存指针是否为空,然后使用`free`函数释放内存,并调用`traceFREE`函数进行内存追踪。最后,使用`vTaskSuspendAll`和`xTaskResumeAll`函数来保证在释放内存的过程中不会发生任务切换。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* [基于freertos的嵌入式系统开发(六)FreeRTOS的内存管理方法4](https://blog.csdn.net/cyjbj/article/details/127031092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [FreeRTOS --(4)内存管理 heap3](https://blog.csdn.net/zhoutaopower/article/details/106677144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文