BeRTOS
|
00001 00049 #ifndef STRUCT_HEAP_H 00050 #define STRUCT_HEAP_H 00051 00052 #include "cfg/cfg_heap.h" 00053 #include <cfg/compiler.h> 00054 #include <cfg/macros.h> // IS_POW2() 00055 00056 /* NOTE: struct size must be a 2's power! */ 00057 typedef struct _MemChunk 00058 { 00059 struct _MemChunk *next; 00060 size_t size; 00061 } MemChunk; 00062 00063 STATIC_ASSERT(IS_POW2(sizeof(MemChunk))); 00064 00065 typedef MemChunk heap_buf_t; 00066 00068 typedef struct Heap 00069 { 00070 struct _MemChunk *FreeList; 00071 } Heap; 00072 00079 #define HEAP_DEFINE_BUF(name, size) \ 00080 heap_buf_t name[((size) + sizeof(heap_buf_t) - 1) / sizeof(heap_buf_t)] 00081 00083 void heap_init(struct Heap* heap, void* memory, size_t size); 00084 00086 void *heap_allocmem(struct Heap* heap, size_t size); 00087 00089 void heap_freemem(struct Heap* heap, void *mem, size_t size); 00090 00091 size_t heap_freeSpace(struct Heap *h); 00092 00093 #define HNEW(heap, type) \ 00094 (type*)heap_allocmem(heap, sizeof(type)) 00095 00096 #define HNEWVEC(heap, type, nelem) \ 00097 (type*)heap_allocmem(heap, sizeof(type) * (nelem)) 00098 00099 #define HDELETE(heap, type, mem) \ 00100 heap_freemem(heap, mem, sizeof(type)) 00101 00102 #define HDELETEVEC(heap, type, nelem, mem) \ 00103 heap_freemem(heap, mem, sizeof(type) * (nelem)) 00104 00105 00106 #if CONFIG_HEAP_MALLOC 00107 00112 void *heap_malloc(struct Heap* heap, size_t size); 00113 void *heap_calloc(struct Heap* heap, size_t size); 00114 void heap_free(struct Heap* heap, void * mem); 00117 #endif 00118 //defgroup heap 00120 00121 int heap_testSetup(void); 00122 int heap_testRun(void); 00123 int heap_testTearDown(void); 00124 00125 #endif /* STRUCT_HEAP_H */