共享多堆
共享的多堆内存池管理器使用多堆分配器来管理一组具有不同功能/属性(可缓存、不可缓存等)的保留内存区域。
所有不同的区域都可以在运行时添加到共享的多堆池中,从而提供一个不透明的“属性”值(一个整数或枚举值),驱动程序或应用程序可以使用它来请求具有某些功能的内存。
此框架通常使用如下:
在启动时,一些平台代码使用shared_multi_heap_pool_init()初始化共享的多堆框架,并使用shared_multi_heap_add()将内存区域添加到内存池,可能从DT收集区域所需的信息。
每个内存区域都编码在一个共享的多堆栈区域结构中。这个结构还携带一个不透明的和用户定义的整数值,用于定义区域功能(例如:可缓存,类cpu,等等)
// Init the shared multi-heap pool
shared_multi_heap_pool_init()
// Fill the struct with the data for cacheable memory
struct shared_multi_heap_region cacheable_r0 = {
.addr = addr_r0,
.size = size_r0,
.attr = SMH_REG_ATTR_CACHEABLE,
};
// Add the region to the pool
shared_multi_heap_add(&cacheable_r0, NULL);
// Add ano
Zephyr内核的共享多堆内存管理器允许动态添加具有不同功能的内存区域到池中。驱动程序和应用可以根据属性请求特定类型的内存。在启动时,平台代码初始化多堆框架并将内存区域添加进去。共享的多堆栈区域结构携带用户定义的属性值,用于定义如缓存等特性。shared_multi_heap_alloc() 函数用于根据这些属性选择合适的内存分配。
订阅专栏 解锁全文
684

被折叠的 条评论
为什么被折叠?



