硬汉嵌入式论坛

 找回密码
 立即注册
查看: 154|回复: 3
收起左侧

[FreeRTOS] FreeRTOS管理多块不连续内存

[复制链接]

8

主题

25

回帖

49

积分

初级会员

积分
49
发表于 2024-4-23 20:51:51 | 显示全部楼层 |阅读模式
硬汉及各位大佬们,请问FreeRTOS下使用heap5管理多个不连续内存(比如ram和ccmram),使用pvPortMalloc()怎么避免从ccmram中分配内存呢?或者说使用malloc类的函数怎么避免从ccmram中分配
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-4-23 21:21:30 | 显示全部楼层
CCMRAM独立管理比较方便

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

使用道具 举报

3

主题

336

回帖

345

积分

高级会员

积分
345
发表于 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实现。
回复

使用道具 举报

8

主题

25

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2024-4-25 11:02:36 | 显示全部楼层
感谢楼上各位大佬,我先瞅瞅看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 12:02 , Processed in 0.259602 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表