Memory Buffer#

Ember Connect API dynamically allocates and frees memory.

Generally, dynamic memory allocation in embedded code is not recommended. However, in some cases, the drawbacks of avoiding them is even bigger. Using C standard library dynamic memory is still not recommended due because it could cause fragmented memory.

For these reasons, Connect allocates some (configurable in the stack common plugin) memory as HEAP at compile-time. Memory allocation from this heap is possible through the API below.

See memory-buffer.h for source code.

APIs#

This handler is invoked by the memory buffers system garbage collector and allows the application to properly mark the application-defined EmberBuffer variables with emberMarkBuffer().Implement associated callback emberAfMarkApplicationBuffersCallback() to use. See Handlers for additional information.

emberAllocateBuffer(uint16_t dataSizeInBytes)

Dynamically allocates memory.

void
emberMarkBuffer(EmberBuffer *buffer)

Prevent the garbage collector from reclaiming the memory associated with the passed EmberBuffer. The application should call this API within the ::emberMarkApplicationBuffersHandler() stack handler for each EmberBuffer object.

uint8_t *
emberGetBufferPointer(EmberBuffer buffer)

Return a pointer to the memory segment corresponding to the passed EmberBuffer buffer. Notice that the garbage collector can move memory segments to defragment the available memory. As result, the application should always use this API to obtain an updated pointer prior to accessing the memory.

uint16_t
emberGetBufferLength(EmberBuffer buffer)

Return the length in bytes of the passed EmberBuffer buffer.

uint16_t

Return the available memory at the buffer manager in bytes.

Macros#

#define
EMBER_NULL_BUFFER 0x0000u

A special EmberBuffer ID indicating that no memory is currently allocated.

APIs Documentation#

emberAllocateBuffer#

EmberBuffer emberAllocateBuffer (uint16_t dataSizeInBytes)

Dynamically allocates memory.

Parameters
TypeDirectionArgument NameDescription
uint16_t[in]dataSizeInBytes

The size in bytes of the memory to be allocated.

Returns

  • An EmberBuffer value of EMBER_NULL_BUFFER if the memory management system could not allocate the requested memory, or any other EmberBuffer value indicating that the requested memory was successfully allocated. The allocated memory can easily be freed by assigning an EmberBuffer variable to EMBER_NULL_BUFFER. The memory will be freed by the garbage collector during the next emberTick() call.


emberMarkBuffer#

void emberMarkBuffer (EmberBuffer * buffer)

Prevent the garbage collector from reclaiming the memory associated with the passed EmberBuffer. The application should call this API within the ::emberMarkApplicationBuffersHandler() stack handler for each EmberBuffer object.

Parameters
TypeDirectionArgument NameDescription
EmberBuffer *[in]buffer

A pointer to the EmberBuffer buffer to be marked.


emberGetBufferPointer#

uint8_t * emberGetBufferPointer (EmberBuffer buffer)

Return a pointer to the memory segment corresponding to the passed EmberBuffer buffer. Notice that the garbage collector can move memory segments to defragment the available memory. As result, the application should always use this API to obtain an updated pointer prior to accessing the memory.

Parameters
TypeDirectionArgument NameDescription
EmberBuffer[in]buffer

A pointer to the EmberBuffer buffer for which the corresponding memory pointer should be returned.

Returns


emberGetBufferLength#

uint16_t emberGetBufferLength (EmberBuffer buffer)

Return the length in bytes of the passed EmberBuffer buffer.

Parameters
TypeDirectionArgument NameDescription
EmberBuffer[in]buffer

A pointer to the EmberBuffer buffer for which the corresponding length in bytes should be returned.

Returns

  • The length in bytes of a memory segment corresponding to the passed EmberBuffer buffer.


emberGetAvailableBufferMemory#

uint16_t emberGetAvailableBufferMemory (void )

Return the available memory at the buffer manager in bytes.

Parameters
TypeDirectionArgument NameDescription
voidN/A

Returns

  • The number of available bytes.