| nRF5 SDK v12.0.0 |

Choose documentation: | nRF5 SDK | S130 SoftDevice API | S132 SoftDevice API | S212 SoftDevice API | S332 SoftDevice API

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Modules | Functions
Memory Manager
SDK common libraries

Memory Manager for the nRF5 SDK. More...

## Modules
| Dynamic memory allocator configuration

## Functions
uint32_t | nrf_mem_init (void)
| Initializes Memory Manager. More...
uint32_t | nrf_mem_reserve (uint8_t **pp_buffer, uint32_t *p_size)
| Reserves a block of memory for the application. More...
void * | nrf_malloc (uint32_t size)
| 'malloc' styled memory allocation function. More...
void * | nrf_calloc (uint32_t nmemb, uint32_t size)
| 'calloc' styled memory allocation function. More...
void | nrf_free (void *p_buffer)
| Free allocated memory - standard 'free' styles API. More...
void * | nrf_realloc (void *p_buffer, uint32_t size)
| Memory reallocation (trim) function. More...
void | nrf_mem_diagnose (void)
| Function to print statstics related to memory blocks managed by memory manager. More...

## Detailed Description

Memory Manager for the nRF5 SDK.

This module allows for dynamic use of memory. Currently, this module can be used only to allocate and free memory in the RAM.

The Memory Manager manages static memory blocks of fixed sizes. These blocks can be requested for usage, and freed when the application no longer needs them. A maximum of seven block categories can be managed by the module. These block categories are identified by xxsmall, xmall, small, medium, large, xlarge, and xxlarge. They are ordered in increasing block sizes. The size and the count of each of the block categories can be configured based on the application requirements in the configuration file `sdk_config.h`. To use fewer than seven buffer pools, do not define the count for the unwanted block or explicitly set it to zero. At least one block category must be configured for this module to function as expected.

## Function Documentation

void* nrf_calloc | ( | uint32_t | nmemb,
|  | uint32_t | size
| ) |  |

'calloc' styled memory allocation function.

API to allocate zero-initialized memory of size count*size.

Parameters

  [in] | nmemb | Number of elements of 'size' bytes.
  [in] | size | Size of each element allocated.

Return values

  Valid,zero-initialized | memory location if the procedure was successful, else, NULL.

void nrf_free | ( | void * | p_buffer | ) |

Free allocated memory - standard 'free' styles API.

API to resubmit memory allocated, same in functionality nrf_free.

Parameters

  [out] | p_buffer | Pointer to the memory block that is being freed.

void* nrf_malloc | ( | uint32_t | size | ) |

'malloc' styled memory allocation function.

API to allocate memory, same as nrf_mem_reserve but uses malloc signature.

Parameters

  [in] | size | Requested memory size.

Return values

  Valid | memory location if the procedure was successful, else, NULL.

void nrf_mem_diagnose | ( | void |  | ) |

Function to print statstics related to memory blocks managed by memory manager.

This API prints information with respects to each block function, including size, total block count, number of blocks in use at the time of printing, smallest memory size allocated in the block and the largest one. This API is intended to help developers tune the block sizes to make optimal use of memory for the application. This functionality is never needed in final application and therefore, is disabled by default.

uint32_t nrf_mem_init | ( | void |  | ) |

Initializes Memory Manager.

API to initialize the Memory Manager. Always call this API before using any of the other APIs of the module. This API should be called only once.

Return values

  NRF_SUCCESS | If initialization was successful. Otherwise, an error code that indicates the reason for the failure is returned.

Warning
  If this API fails, the application shall not proceed with using other APIs of this module.

uint32_t nrf_mem_reserve | ( | uint8_t ** | pp_buffer,
|  | uint32_t * | p_size
| ) |  |

Reserves a block of memory for the application.

API to request a contiguous memory block of the given length. If the memory allocation succeeds, pp_buffer points to the memory block. If the memory allocation fails, pp_buffer points to NULL and the return value of the API indicates the reason for the failure. The memory block reserved using this API can be freed using the nrf_free function.

Parameters

  [out] | pp_buffer | Pointer to the allocated memory block if memory allocation succeeds; otherwise points to NULL.
  [in,out] | p_size | Requested memory size. This parameter returns the actual size allocated. If the procedure was successful, the actual size returned is always greater than or equal to requested size, never less.

Return values

  NRF_SUCCESS | If memory was successfully allocated. Otherwise, an error code indicating the reason for failure.
  NRF_ERROR_INVALID_PARAM | If the requested memory size is zero or greater than the largest memory block that the module is configured to support.
  NRF_ERROR_NO_MEM | If there is no memory available of the requested size.

void* nrf_realloc | ( | void * | p_buffer,
|  | uint32_t | size
| ) |  |

Memory reallocation (trim) function.

API to reallocate memory or to trim it. Trim is mentioned here to avoid use of API to request memory size larger than original memory allocated.

Parameters

  [in] | p_buffer | Pointer to the memory block that needs to be trimmed.
  [in] | size | Size of memory at the beginning of the buffer to be left untrimmed.

Return values

  Pointer | to memory location with trimmed size, else, NULL.