Files
mkrtos-real/mkrtos_knl/knl/mm_wrap.c

83 lines
1.8 KiB
C
Raw Normal View History

2023-09-29 01:03:19 +08:00
/**
* @file mm_wrap.c
* @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"
#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;
}
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)
{
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)
{
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);
}