UbixOS V2 2.0

Data Structures | Macros | Functions
mem.c File Reference
`#include "net/opt.h"`
`#include "net/mem.h"`
`#include "net/def.h"`
`#include "net/sys.h"`
`#include "net/stats.h"`
`#include "net/err.h"`
`#include <string.h>`
Include dependency graph for mem.c:

Go to the source code of this file.

## Data Structures
struct | mem

## Macros
#define | LWIP_MEM_ALLOC_DECL_PROTECT()
#define | LWIP_MEM_ALLOC_PROTECT()
#define | LWIP_MEM_ALLOC_UNPROTECT()
#define | LWIP_MEM_FREE_DECL_PROTECT()
#define | LWIP_MEM_FREE_PROTECT() sys_mutex_lock(&mem_mutex)
#define | LWIP_MEM_FREE_UNPROTECT() sys_mutex_unlock(&mem_mutex)
#define | LWIP_RAM_HEAP_POINTER ram_heap
#define | MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE)
#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))

## Functions
| LWIP_DECLARE_MEMORY_ALIGNED (ram_heap, LWIP_MEM_ALIGN_SIZE(MEM_SIZE)+(2U *LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))))
void * | mem_calloc (mem_size_t count, mem_size_t size)
void | mem_free (void *rmem)
void | mem_init (void)
void * | mem_malloc (mem_size_t size)
void * | mem_trim (void *rmem, mem_size_t newsize)

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

## Macro Definition Documentation

## ◆ LWIP_MEM_ALLOC_DECL_PROTECT

#define LWIP_MEM_ALLOC_DECL_PROTECT | ( |  | ) |

Definition at line 325 of file mem.c.

## ◆ LWIP_MEM_ALLOC_PROTECT

#define LWIP_MEM_ALLOC_PROTECT | ( |  | ) |

Definition at line 326 of file mem.c.

## ◆ LWIP_MEM_ALLOC_UNPROTECT

#define LWIP_MEM_ALLOC_UNPROTECT | ( |  | ) |

Definition at line 327 of file mem.c.

## ◆ LWIP_MEM_FREE_DECL_PROTECT

#define LWIP_MEM_FREE_DECL_PROTECT | ( |  | ) |

Definition at line 321 of file mem.c.

## ◆ LWIP_MEM_FREE_PROTECT

#define LWIP_MEM_FREE_PROTECT | ( |  | ) | sys_mutex_lock(&mem_mutex)

Definition at line 322 of file mem.c.

## ◆ LWIP_MEM_FREE_UNPROTECT

#define LWIP_MEM_FREE_UNPROTECT | ( |  | ) | sys_mutex_unlock(&mem_mutex)

Definition at line 323 of file mem.c.

## ◆ LWIP_RAM_HEAP_POINTER

#define LWIP_RAM_HEAP_POINTER ram_heap

Definition at line 291 of file mem.c.

## ◆ MEM_SIZE_ALIGNED

#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MEM_SIZE)

Definition at line 282 of file mem.c.

## ◆ MIN_SIZE

#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 277 of file mem.c.

## ◆ MIN_SIZE_ALIGNED

#define MIN_SIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(MIN_SIZE)

Definition at line 280 of file mem.c.

## ◆ SIZEOF_STRUCT_MEM

#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))

Definition at line 281 of file mem.c.

## Function Documentation

## ◆ LWIP_DECLARE_MEMORY_ALIGNED()

LWIP_DECLARE_MEMORY_ALIGNED | ( | ram_heap | ,
|  | LWIP_MEM_ALIGN_SIZE(MEM_SIZE)+(2U *LWIP_MEM_ALIGN_SIZE(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

## ◆ mem_calloc()

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 765 of file mem.c.

References mem_malloc(), and memset().

Here is the call graph for this function:

## ◆ mem_free()

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 419 of file mem.c.

References LWIP_ASSERT, LWIP_DBG_LEVEL_SERIOUS, LWIP_DBG_TRACE, LWIP_DEBUGF, LWIP_MEM_FREE_DECL_PROTECT, MEM_ALIGNMENT, MEM_DEBUG, and NULL.

Referenced by mem_free_callback(), and pbuf_free().

## ◆ mem_init()

void mem_init | ( | void |  | ) |

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

Definition at line 382 of file mem.c.

References LWIP_ASSERT, MEM_ALIGNMENT, and SIZEOF_STRUCT_MEM.

Referenced by lwip_init().

## ◆ mem_malloc()

void* mem_malloc | ( | mem_size_t | size | ) |

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 603 of file mem.c.

References LWIP_MEM_ALIGN_SIZE, LWIP_MEM_ALLOC_DECL_PROTECT, MEM_SIZE_ALIGNED, MIN_SIZE_ALIGNED, NULL, and sys_mutex_lock().

Referenced by ethernetif_init(), mem_calloc(), and pbuf_alloc().

Here is the call graph for this function:

## ◆ mem_trim()

void* mem_trim | ( | void * | rmem,
|  | mem_size_t | newsize
| ) |  |

Shrink memory returned by mem_malloc().

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 478 of file mem.c.

References LWIP_ASSERT, LWIP_MEM_ALIGN_SIZE, LWIP_MEM_FREE_DECL_PROTECT, MEM_SIZE_ALIGNED, MIN_SIZE_ALIGNED, and NULL.

Referenced by pbuf_realloc().