#ifndef _KE_MEM_H_ #define _KE_MEM_H_ #include "rwip_config.h" // IP configuration #include // standard integer #include // 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_