2023-09-29 01:03:19 +08:00
|
|
|
/**
|
|
|
|
|
* @file mm_wrap.c
|
2023-12-02 10:16:14 +08:00
|
|
|
* @author ATShining (1358745329@qq.com)
|
2023-09-29 01:03:19 +08:00
|
|
|
* @brief
|
|
|
|
|
* @version 0.1
|
|
|
|
|
* @date 2023-09-29
|
|
|
|
|
*
|
|
|
|
|
* @copyright Copyright (c) 2023
|
|
|
|
|
*
|
|
|
|
|
*/
|
2023-08-20 20:52:23 +08:00
|
|
|
#include "mm_wrap.h"
|
|
|
|
|
#include "types.h"
|
|
|
|
|
#include "mm.h"
|
|
|
|
|
#include "ram_limit.h"
|
|
|
|
|
#include "globals.h"
|
2023-10-03 17:46:02 +08:00
|
|
|
#include "string.h"
|
2023-08-20 20:52:23 +08:00
|
|
|
void *mm_limit_alloc(ram_limit_t *limit, size_t size)
|
|
|
|
|
{
|
|
|
|
|
if (ram_limit_alloc(limit, size) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
void *new_mem = mem_alloc(mm_get_global(), size + sizeof(size_t));
|
|
|
|
|
|
|
|
|
|
if (!new_mem)
|
|
|
|
|
{
|
|
|
|
|
ram_limit_free(limit, size);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
2023-10-03 17:46:02 +08:00
|
|
|
memset(new_mem, 0, size + sizeof(size_t));
|
2023-08-20 20:52:23 +08:00
|
|
|
*((size_t *)new_mem) = size;
|
|
|
|
|
|
|
|
|
|
return (char *)new_mem + sizeof(size_t);
|
|
|
|
|
}
|
|
|
|
|
void mm_limit_free(ram_limit_t *limit, void *mem)
|
|
|
|
|
{
|
2023-09-29 13:23:12 +08:00
|
|
|
if (!mem)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
size_t size = *((size_t *)((char *)mem - sizeof(size_t)));
|
2023-08-20 20:52:23 +08:00
|
|
|
|
|
|
|
|
mem_free(mm_get_global(), (char *)mem - sizeof(size_t));
|
|
|
|
|
ram_limit_free(limit, size);
|
|
|
|
|
}
|
2023-08-26 23:12:31 +08:00
|
|
|
struct mem_heap *mm_get_free(struct mem_heap *next,
|
|
|
|
|
umword_t hope_size, umword_t *ret_addr)
|
|
|
|
|
{
|
|
|
|
|
return mem_get_free(mm_get_global(), next, hope_size, (uint32_t *)ret_addr);
|
|
|
|
|
}
|
|
|
|
|
void mm_trace(void)
|
|
|
|
|
{
|
|
|
|
|
mem_trace(mm_get_global());
|
|
|
|
|
}
|
2024-01-05 23:59:48 +08:00
|
|
|
void mm_info(size_t *total, size_t *free)
|
|
|
|
|
{
|
|
|
|
|
mem_info(mm_get_global(), total, free);
|
|
|
|
|
}
|
2023-08-22 00:26:34 +08:00
|
|
|
void *mm_limit_alloc_align(ram_limit_t *limit, size_t size, size_t align)
|
|
|
|
|
{
|
|
|
|
|
if (ram_limit_alloc(limit, size) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
2023-08-27 16:52:53 +08:00
|
|
|
void *new_mem = mem_alloc_align(mm_get_global(), size, align);
|
2023-08-22 00:26:34 +08:00
|
|
|
|
|
|
|
|
if (!new_mem)
|
|
|
|
|
{
|
|
|
|
|
ram_limit_free(limit, size);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (char *)new_mem;
|
|
|
|
|
}
|
|
|
|
|
void mm_limit_free_align(ram_limit_t *limit, void *mem, size_t size)
|
|
|
|
|
{
|
2023-09-29 13:23:12 +08:00
|
|
|
if (!mem)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2023-08-27 16:52:53 +08:00
|
|
|
mem_free_align(mm_get_global(), (char *)mem);
|
2023-08-22 00:26:34 +08:00
|
|
|
ram_limit_free(limit, size);
|
|
|
|
|
}
|