140 lines
4.3 KiB
C
140 lines
4.3 KiB
C
#ifndef _KE_MEM_H_
|
|
#define _KE_MEM_H_
|
|
|
|
#include "rwip_config.h" // IP configuration
|
|
#include <stdint.h> // standard integer
|
|
#include <stdbool.h> // standard includes
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @defgroup MEM Memory
|
|
* @ingroup KERNEL
|
|
* @brief Heap management module.
|
|
*
|
|
* This module implements heap management functions that allow initializing heap,
|
|
* allocating and freeing memory.
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
// forward declarations
|
|
struct mblock_free;
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Heap initialization.
|
|
*
|
|
* This function performs the following operations:
|
|
* - sanity checks
|
|
* - check memory allocated is at least large enough to hold two block descriptors to hold
|
|
* start and end
|
|
* - initialize the first and last descriptors
|
|
* - save heap into kernel environment variable.
|
|
*
|
|
* @param[in] type Memory type.
|
|
* @param[in|out] heap Heap pointer
|
|
* @param[in] heap_size Size of the heap
|
|
*
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void ke_mem_init(uint8_t type, uint8_t* heap, uint16_t heap_size);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Allocation of a block of memory.
|
|
*
|
|
* Allocates a memory block whose size is size; if no memory is available return NULL
|
|
*
|
|
* @param[in] size Size of the memory area that need to be allocated.
|
|
* @param[in] type Type of memory block
|
|
*
|
|
* @return A pointer to the allocated memory area.
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void *ke_malloc(uint32_t size, uint8_t type);
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Check if it's possible to allocate a block of memory with a specific size.
|
|
*
|
|
* @param[in] size Size of the memory area that need to be allocated.
|
|
* @param[in] type Type of memory block
|
|
*
|
|
* @return True if memory block can be allocated, False else.
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
bool ke_check_malloc(uint32_t size, uint8_t type);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Freeing of a block of memory.
|
|
*
|
|
* Free the memory area pointed by mem_ptr : mark the block as free and insert it in
|
|
* the pool of free block.
|
|
*
|
|
* @param[in] mem_ptr Pointer to the memory area that need to be freed.
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
void ke_free(void *mem_ptr);
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Check if current heap is empty or not (not used)
|
|
*
|
|
* @param[in] type Type of memory heap block
|
|
*
|
|
* @return true if heap not used, false else.
|
|
****************************************************************************************
|
|
*/
|
|
bool ke_mem_is_empty(uint8_t type);
|
|
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Check if current pointer is free or not
|
|
*
|
|
* @param[in] mem_ptr pointer to a memory block
|
|
*
|
|
* @return true if already free, false else.
|
|
****************************************************************************************
|
|
*/
|
|
bool ke_is_free(void* mem_ptr);
|
|
|
|
#if (KE_PROFILING)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve memory usage of selected heap.
|
|
*
|
|
* @param[in] type Type of memory heap block
|
|
*
|
|
* @return current memory usage of current heap.
|
|
****************************************************************************************
|
|
*/
|
|
uint16_t ke_get_mem_usage(uint8_t type);
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve max memory usage of all heap.
|
|
* This command also resets max measured value.
|
|
*
|
|
* @return max memory usage of all heap.
|
|
****************************************************************************************
|
|
*/
|
|
uint32_t ke_get_max_mem_usage(void);
|
|
|
|
#endif // (KE_PROFILING)
|
|
|
|
///@} MEM
|
|
|
|
#endif // _KE_MEM_H_
|
|
|