1 /* 2 * Copyright (c) 2006-2018, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2018-06-10 Bernard first version 9 */ 10 11 #ifndef __LWP_MEMHEAP_H__ 12 #define __LWP_MEMHEAP_H__ 13 14 #include <stdint.h> 15 #include <rtthread.h> 16 17 /** 18 * memory item on the heap 19 */ 20 struct rt_lwp_memheap_item 21 { 22 rt_uint32_t magic; /**< magic number for memheap */ 23 struct rt_lwp_memheap *pool_ptr; /**< point of pool */ 24 25 struct rt_lwp_memheap_item *next; /**< next memheap item */ 26 struct rt_lwp_memheap_item *prev; /**< prev memheap item */ 27 28 struct rt_lwp_memheap_item *next_free; /**< next free memheap item */ 29 struct rt_lwp_memheap_item *prev_free; /**< prev free memheap item */ 30 }; 31 32 /** 33 * Base structure of memory heap object 34 */ 35 struct rt_lwp_memheap 36 { 37 struct rt_object parent; /**< inherit from rt_object */ 38 39 void *start_addr; /**< pool start address and size */ 40 41 rt_uint32_t pool_size; /**< pool size */ 42 rt_uint32_t available_size; /**< available size */ 43 rt_uint32_t max_used_size; /**< maximum allocated size */ 44 45 struct rt_lwp_memheap_item *block_list; /**< used block list */ 46 struct rt_lwp_memheap_item *free_list; /**< free block list */ 47 struct rt_lwp_memheap_item free_header; /**< free block list header */ 48 49 struct rt_semaphore lock; /**< semaphore lock */ 50 51 rt_list_t mlist; 52 }; 53 54 extern rt_err_t rt_lwp_memheap_init(struct rt_lwp_memheap *memheap, const char *name, void *start_addr, rt_uint32_t size); 55 extern void *rt_lwp_memheap_alloc(struct rt_lwp_memheap *heap, rt_uint32_t size); 56 extern void rt_lwp_memheap_free(void *ptr); 57 extern void *rt_lwp_memheap_realloc(struct rt_lwp_memheap *heap, void *ptr, rt_size_t newsize); 58 extern rt_bool_t rt_lwp_memheap_is_empty(struct rt_lwp_memheap *memheap); 59 extern rt_bool_t rt_lwp_memheap_unavailable_size_get(void); 60 61 #endif 62