SAMV71 Xplained Ultra Software Package 1.0

mem.c File Reference

#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/sys.h"
#include "lwip/stats.h"
#include <string.h>

Go to the source code of this file.

Data Structures

struct  mem

Defines

#define MIN_SIZE   12
#define MIN_SIZE_ALIGNED   LWIP_MEM_ALIGN_SIZE(MIN_SIZE)
#define SIZEOF_STRUCT_MEM   LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))
#define MEM_SIZE_ALIGNED   LWIP_MEM_ALIGN_SIZE(MEM_SIZE)
#define LWIP_MEM_FREE_DECL_PROTECT()
#define LWIP_MEM_FREE_PROTECT()   sys_arch_sem_wait(mem_sem, 0)
#define LWIP_MEM_FREE_UNPROTECT()   sys_sem_signal(mem_sem)
#define LWIP_MEM_ALLOC_DECL_PROTECT()
#define LWIP_MEM_ALLOC_PROTECT()
#define LWIP_MEM_ALLOC_UNPROTECT()

Functions

void mem_init (void)
void mem_free (void *rmem)
void * mem_realloc (void *rmem, mem_size_t newsize)
void * mem_malloc (mem_size_t size)
void * mem_calloc (mem_size_t count, mem_size_t size)

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 MEM_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 mem.c.


Define Documentation

#define MIN_SIZE   12

All allocated blocks will be MIN_SIZE bytes big, at least! MIN_SIZE can be overridden to suit your needs. Smaller values save space, larger values could prevent too small blocks to fragment the RAM too much.

Definition at line 167 of file mem.c.


Function Documentation

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:
count number of objects to allocate
size size of the objects to allocate
Returns:
pointer to allocated memory / NULL pointer if there is an error

Definition at line 620 of file mem.c.

Here is the call graph for this function:

void mem_free ( void *  rmem  ) 

Put a struct mem back on the heap

Parameters:
rmem is the data portion of a struct mem as returned by a previous call to mem_malloc()

Definition at line 297 of file mem.c.

void mem_init ( void   ) 

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

Definition at line 262 of file mem.c.

void* mem_malloc ( mem_size_t  size  ) 

Adam's mem_malloc() plus solution for bug #17922 Allocate a block of memory with a minimum of 'size' bytes.

Parameters:
size is 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).

Definition at line 482 of file mem.c.

void* mem_realloc ( void *  rmem,
mem_size_t  newsize 
)

In contrast to its name, mem_realloc can only shrink memory, not expand it. Since the only use (for now) is in pbuf_realloc (which also can only shrink), this shouldn't be a problem!

Parameters:
rmem pointer to memory allocated by mem_malloc the is to be shrinked
newsize required 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 357 of file mem.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines