57 lines
1.5 KiB
C
57 lines
1.5 KiB
C
#ifndef UMM_MALLOC_H
|
|
#define UMM_MALLOC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern unsigned char umm_heap_array[];
|
|
|
|
#ifndef size_t
|
|
typedef unsigned int size_t;
|
|
#endif
|
|
|
|
/* Start addresses and the size of the heap */
|
|
#define UMM_MALLOC_CFG_HEAP_ADDR (umm_heap_array)
|
|
#ifdef __DUAL_MIC_RECORDING__
|
|
#define UMM_MALLOC_CFG_HEAP_SIZE (10 * 1024)
|
|
#else
|
|
#define UMM_MALLOC_CFG_HEAP_SIZE 0x1000 // 4K
|
|
#endif
|
|
/* A couple of macros to make packing structures less compiler dependent */
|
|
|
|
#define UMM_H_ATTPACKPRE
|
|
#define UMM_H_ATTPACKSUF __attribute__((__packed__))
|
|
|
|
#define UMM_BEST_FIT
|
|
#undef UMM_FIRST_FIT
|
|
|
|
/*
|
|
* A couple of macros to make it easier to protect the memory allocator
|
|
* in a multitasking system. You should set these macros up to use whatever
|
|
* your system uses for this purpose. You can disable interrupts entirely, or
|
|
* just disable task switching - it's up to you
|
|
*
|
|
* NOTE WELL that these macros MUST be allowed to nest, because umm_free() is
|
|
* called from within umm_malloc()
|
|
*/
|
|
|
|
#define UMM_CRITICAL_ENTRY() LOCK_UMM_CLOCK()
|
|
#define UMM_CRITICAL_EXIT() UNLOCK_UMM_CLOCK()
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
void umm_init( void );
|
|
void *umm_malloc( size_t size );
|
|
void *umm_calloc( size_t num, size_t size );
|
|
void *umm_realloc( void *ptr, size_t size );
|
|
void umm_free( void *ptr );
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* UMM_MALLOC_H */
|