对于使用C++或者第三方库的情况,如果使用rt-thread的内存管理函数,需要进行大量的代码替换。这里提供一种思路,重定义C内存分配函数为rt-thread内存管理,一键完成PSRAM的动态内存使用。代码如下:
#include “rtthread.h”
static uint8_t opus_heap_pool[5000 * 1024] L2_RET_BSS_SECT(opus_heap_pool);
static struct rt_memheap opus_memheap;
// 重定义内存管理函数
void * malloc(size_t size) _attribute_((alias(“opus_heap_malloc”)));
void free(void* ptr) _attribute_((alias(“opus_heap_free”)));
void * realloc(void *ptr, size_t new_size) _attribute_((alias(“opus_heap_realloc”)));
void * calloc(rt_size_t nelem, rt_size_t elsize) _attribute_((alias(“opus_heap_calloc”)));
int opus_heap_init(void)
{
rt_memheap_init(&opus_memheap, "opus_memheap", (void *)opus_heap_pool,
sizeof(opus_heap_pool));
return 0;
}
INIT_BOARD_EXPORT(opus_heap_init); // 关键:使用板级初始化导出宏
void *opus_heap_malloc(uint32_t size)
{
return rt_memheap_alloc(&opus_memheap, size);
}
void opus_heap_free(void *p)
{
rt_memheap_free(p);
}
void *opus_heap_realloc(void *ptr, uint32_t newsize)
{
return rt_memheap_realloc(&opus_memheap, ptr , newsize);
}
void *opus_heap_calloc(uint32_t num, uint32_t size)
{
return rt_memheap_calloc(&opus_memheap, num, size);
}