重定义C内存分配函数以实现PSRAM内存动态申请

对于使用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);

}

1 个赞