Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Embed: (wiki syntax)

« Back to documentation index

lwip_mem.c File Reference

lwip_mem.c File Reference

Dynamic memory manager. More...

Go to the source code of this file.

Functions

void mem_overflow_check_raw (void *p, size_t size, const char *descr1, const char *descr2)
 Check if a mep element was victim of an overflow or underflow (e.g.
void mem_overflow_init_raw (void *p, size_t size)
 Initialize the restricted area of a mem element.
void mem_init (void)
 mem_init is not used when using pools instead of a heap or using C library malloc().
void * mem_trim (void *mem, mem_size_t size)
 mem_trim is not used when using pools instead of a heap or using C library malloc(): we can't free part of a pool element and the stack support mem_trim() to return a different pointer
void * mem_malloc (mem_size_t size)
 Allocate a block of memory with a minimum of 'size' bytes.
void mem_free (void *rmem)
 Put memory back on the heap.
 LWIP_DECLARE_MEMORY_ALIGNED (ram_heap, MEM_SIZE_ALIGNED+(2U *SIZEOF_STRUCT_MEM))
 If you want to relocate the heap to external memory, simply define LWIP_RAM_HEAP_POINTER as a void-pointer to that location.
static void plug_holes (struct mem *mem)
 "Plug holes" by combining adjacent empty struct mems.
void * mem_calloc (mem_size_t count, mem_size_t size)
 Contiguously allocates enough space for count objects that are size bytes of memory each and returns a pointer to the allocated memory.

Variables

static u8_t * ram
 pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array
static struct mem * ram_end
 the last entry, always unused!
static sys_mutex_t mem_mutex
 concurrent access protection
static struct mem
*LWIP_MEM_LFREE_VOLATILE 
lfree
 pointer to the lowest free block, this is used for faster search

Detailed Description

Dynamic memory manager.

This is a lightweight replacement for the standard C library malloc().

If you want to use the standard C library malloc() instead, define MEM_LIBC_MALLOC to 1 in your lwipopts.h

To let mem_malloc() use pools (prevents fragmentation and is much faster than a heap but might waste some memory), define MEM_USE_POOLS to 1, define MEMP_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list of pools like this (more pools can be added between _START and _END):

Define three pools with sizes 256, 512, and 1512 bytes LWIP_MALLOC_MEMPOOL_START LWIP_MALLOC_MEMPOOL(20, 256) LWIP_MALLOC_MEMPOOL(10, 512) LWIP_MALLOC_MEMPOOL(5, 1512) LWIP_MALLOC_MEMPOOL_END

Definition in file lwip_mem.c.


Function Documentation

LWIP_DECLARE_MEMORY_ALIGNED ( ram_heap  ,
MEM_SIZE_ALIGNED+  2U *SIZEOF_STRUCT_MEM 
)

If you want to relocate the heap to external memory, simply define LWIP_RAM_HEAP_POINTER as a void-pointer to that location.

If so, make sure the memory at that location is big enough (see below on how that space is calculated). the heap. we need one struct mem at the end and some room for alignment

void * mem_calloc ( mem_size_t  count,
mem_size_t  size 
)

Contiguously allocates enough space for count objects that are size bytes of memory each and returns a pointer to the allocated memory.

The allocated memory is filled with bytes of value zero.

Parameters:
countnumber of objects to allocate
sizesize of the objects to allocate
Returns:
pointer to allocated memory / NULL pointer if there is an error

Definition at line 982 of file lwip_mem.c.

void mem_free ( void *  rmem )

Put memory back on the heap.

Put a struct mem back on the heap.

Free memory previously allocated by mem_malloc.

Parameters:
rmemis the pointer as returned by a previous call to mem_malloc()

Loads the pool number and calls memp_free with that pool number to put the element back into its pool

Parameters:
rmemthe memory element to free
rmemis the data portion of a struct mem as returned by a previous call to mem_malloc()

Definition at line 228 of file lwip_mem.c.

void mem_init ( void   )

mem_init is not used when using pools instead of a heap or using C library malloc().

Zero the heap and initialize start, end and lowest-free.

Definition at line 160 of file lwip_mem.c.

void * mem_malloc ( mem_size_t  size_in )

Allocate a block of memory with a minimum of 'size' bytes.

Allocate memory: determine the smallest pool that is big enough to contain an element of 'size' and get an element from that pool.

Parameters:
sizeis the minimum size of the requested block in bytes.
Returns:
pointer to allocated memory or NULL if no free memory was found.

Note that the returned value must always be aligned (as defined by MEM_ALIGNMENT).

Parameters:
sizethe size in bytes of the memory needed
Returns:
a pointer to the allocated memory or NULL if the pool is empty
Parameters:
size_inis the minimum size of the requested block in bytes.
Returns:
pointer to allocated memory or NULL if no free memory was found.

Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).

Try a bigger pool if this one is empty!

Definition at line 207 of file lwip_mem.c.

void mem_overflow_check_raw ( void *  p,
size_t  size,
const char *  descr1,
const char *  descr2 
)

Check if a mep element was victim of an overflow or underflow (e.g.

the restricted area after/before it has been altered)

Parameters:
pthe mem element to check
sizeallocated size of the element
descr1description of the element source shown on error
descr2description of the element source shown on error

Definition at line 97 of file lwip_mem.c.

void mem_overflow_init_raw ( void *  p,
size_t  size 
)

Initialize the restricted area of a mem element.

Definition at line 135 of file lwip_mem.c.

void * mem_trim ( void *  rmem,
mem_size_t  new_size 
)

mem_trim is not used when using pools instead of a heap or using C library malloc(): we can't free part of a pool element and the stack support mem_trim() to return a different pointer

Shrink memory returned by mem_malloc().

Parameters:
rmempointer to memory allocated by mem_malloc the is to be shrinked
new_sizerequired size after shrinking (needs to be smaller than or equal to the previous size)
Returns:
for compatibility reasons: is always == rmem, at the moment or NULL if newsize is > old size, in which case rmem is NOT touched or freed!

Definition at line 169 of file lwip_mem.c.

static void plug_holes ( struct mem *  mem ) [static]

"Plug holes" by combining adjacent empty struct mems.

After this function is through, there should not exist one empty struct mem pointing to another empty struct mem.

Parameters:
memthis points to a struct mem which just has been freed

Definition at line 474 of file lwip_mem.c.


Variable Documentation

struct mem* LWIP_MEM_LFREE_VOLATILE lfree [static]

pointer to the lowest free block, this is used for faster search

Definition at line 421 of file lwip_mem.c.

sys_mutex_t mem_mutex [static]

concurrent access protection

Definition at line 390 of file lwip_mem.c.

u8_t* ram [static]

pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array

Definition at line 384 of file lwip_mem.c.

struct mem* ram_end [static]

the last entry, always unused!

Definition at line 386 of file lwip_mem.c.