老鸟kkk 发表于 2024-4-23 20:51:51

FreeRTOS管理多块不连续内存

硬汉及各位大佬们,请问FreeRTOS下使用heap5管理多个不连续内存(比如ram和ccmram),使用pvPortMalloc()怎么避免从ccmram中分配内存呢?或者说使用malloc类的函数怎么避免从ccmram中分配

eric2013 发表于 2024-4-23 21:21:30

CCMRAM独立管理比较方便

像使用内部SRAM一样定义使用SDRAM和CCM RAM,可以随意定义到指定的RAM区域且无需具体地址
https://www.armbbs.cn/forum.php?mod=viewthread&tid=89275

glory 发表于 2024-4-24 14:19:28

参考乐鑫的IDF做法。它也是基于freeRTOS,芯片也是具备多种不同质地的RAM,比如SRAM、IRAM、DRAM、PSRAM,且他们的对齐方式也不同。
他是这么做的:
定义void *heap_caps_malloc(size_t size, uint32_t caps);函数用于统一管理所有质地的RAM;
其中caps参数有如下取值:
MALLOC_CAP_EXEC
MALLOC_CAP_32BIT
MALLOC_CAP_8BIT
MALLOC_CAP_DMA
MALLOC_CAP_SPIRAM
MALLOC_CAP_INTERNAL
MALLOC_CAP_DEFAULT
MALLOC_CAP_IRAM_8BIT
MALLOC_CAP_RETENTION
MALLOC_CAP_RTCRAM
MALLOC_CAP_TCM
MALLOC_CAP_INVALID
普通C库函数malloc用heap_caps_malloc(size,MALLOC_CAP_DEFAULT)实现;
若用户需要其它质地的RAM,根据需求自行调用heap_caps_malloc即可。
最后,所有质地的RAM统一用void heap_caps_free(void *ptr)函数释放。
这个函数会根据ptr的取值,自动归还到对应的heap中。
显然,C库的free函数也是用heap_caps_free实现。

老鸟kkk 发表于 2024-4-25 11:02:36

感谢楼上各位大佬,我先瞅瞅看
页: [1]
查看完整版本: FreeRTOS管理多块不连续内存