Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Memory block management functions

The memory block allocation routines provide a simple yet powerful set of functions for managing a set of memory blocks of fixed size.

A set of memory blocks is statically declared with the MEMB() macro. Memory blocks are allocated from the declared memory by the memb_alloc() function, and are deallocated with the memb_free() function.

Data Structures

struct  memb
 

Files

file  memb.c
 Memory block allocation routines.
 
file  memb.h
 
    Memory block allocation routines.

 

Macros

#define MEMB(name, structure, num)
 Declare a memory block. More...
 

Functions

void * memb_alloc (struct memb *m)
 Allocate a memory block from a block of memory declared with MEMB(). More...
 
char memb_free (struct memb *m, void *ptr)
 Deallocate a memory block from a memory block previously declared with MEMB(). More...
 
void memb_init (struct memb *m)
 Initialize a memory block that was declared with MEMB(). More...
 
int memb_inmemb (struct memb *m, void *ptr)
 

#define MEMB (   name,
  structure,
  num 
)
Value:
static char CC_CONCAT(name,_memb_count)[num]; \
static structure CC_CONCAT(name,_memb_mem)[num]; \
static struct memb name = {sizeof(structure), num, \
CC_CONCAT(name,_memb_count), \
(void *)CC_CONCAT(name,_memb_mem)}
#define CC_CONCAT(s1, s2)
A C preprocessing macro for concatenating to strings.
Definition: wireless/SmartConnect_6LoWPAN/core/sys/cc.h:137
unsigned short num
Definition: memb.h:98
Definition: memb.h:96
const char * name
The name of the test suite.
Definition: suite.h:193

Declare a memory block.

This macro is used to statically declare a block of memory that can be used by the block allocation functions. The macro statically declares a C array with a size that matches the specified number of blocks and their individual sizes.

Example:

MEMB(connections, struct connection, 16);
Parameters
nameThe name of the memory block (later used with memb_init(), memb_alloc() and memb_free()).
structureThe name of the struct that the memory block holds
numThe total number of memory chunks in the block.

void * memb_alloc ( struct memb m)

Allocate a memory block from a block of memory declared with MEMB().

Parameters
mA memory block previously declared with MEMB().

References count, i, mem, NULL, num, and size.

Referenced by handle_incoming_reg(), httpd_appcall(), if(), ip64_addrmap_create(), nbr_table_allocate(), packetqueue_enqueue_packetbuf(), phase_wait(), send_packet(), servreg_hack_register(), uaodv_rt_add(), uip_ds6_defrt_add(), uip_ds6_route_add(), and uip_packetqueue_alloc().

char memb_free ( struct memb m,
void *  ptr 
)

Deallocate a memory block from a memory block previously declared with MEMB().

Parameters
mm A memory block previously declared with MEMB().
ptrA pointer to the memory block that is to be deallocated.
Returns
The new reference count for the memory block (should be 0 if successfully deallocated) or -1 if the pointer "ptr" did not point to a legal memory block.

References count, i, mem, ptr, and size.

Referenced by check_age(), free_packet(), httpd_appcall(), if(), packet_timedout(), packetqueue_dequeue(), packetqueue_enqueue_packetbuf(), purge_registrations(), queuebuf_free(), recycle(), remove_queued_packet(), send_packet(), uaodv_rt_flush_all(), uip_ds6_defrt_rm(), uip_ds6_route_add(), uip_ds6_route_rm(), and uip_packetqueue_free().

void memb_init ( struct memb m)

Initialize a memory block that was declared with MEMB().

Parameters
mA memory block previously declared with MEMB().

References count, mem, num, and size.

Referenced by httpd_init(), init(), ip64_addrmap_init(), packetqueue_init(), phase_init(), queuebuf_init(), servreg_hack_init(), uaodv_rt_init(), and uip_ds6_route_init().

int memb_inmemb ( struct memb m,
void *  ptr 
)

References mem, num, and size.

Referenced by queuebuf_dataptr(), queuebuf_free(), and queuebuf_to_packetbuf().