Memory¶
MiraOS/MiraMesh uses dynamic memory allocation during the mira_net_init call. The memory can be allocated using a user defined allocation function or a buffer can be given to MiraOS to use for allocation.
After mira_net_init and mira_fota_init have been called, no more memory is allocated.
If it is allocating from a buffer, use mira_mem_buffer_get_usage() to get the total memory usage.
If Mira can't allocate enough memory, it will print a message about it and loop until the watchdog resets the system.
Defines¶
MIRA_MEM_SET_BUFFER¶
Create a buffer of a given size and use it with mira_mem_set_alloc_buffer()
Parameters¶
Name | Description |
---|---|
_SIZE | The size of the memory block |
Types¶
mira_mem_alloc_callback_t¶
Callback to return a newly allocated memory block
If successful, return a pointer a memory block of at least size bytes. Make sure the memory block is aligned.
Parameters¶
Name | Description |
---|---|
size | The size of the memory block |
storage | A pointer passed to mira_mem_set_alloc_callback() |
Return value¶
An aligned pointer, or NULL if not successful
Functions¶
mira_mem_set_alloc_callback¶
Set a callback to allocate memory.
If the system already implements a version of malloc, set a callback that can map memory allocation to the memory allocation routine available in the system.
If using this method of allocation, no other mira_mem_set_alloc_*() should be used.
Parameters¶
Name | Description |
---|---|
alloc_callback | Callback to be called for each allocation |
storage | Pointer to be directly passed to callback |
Return value¶
Name | Description |
---|---|
MIRA_SUCCESS | Callback successfully set. |
mira_mem_set_alloc_buffer¶
Set a memory buffer available for memory usage.
If the system doesn't handle memory management itself, a static memory buffer can be used for internal memory management of Mira.
Pass a statically allocated RAM buffer, which can be managed by Mira internally.
The buffer is expected to be aligned to the CPUs native alignement.
Note that once set, the buffer can't be released.
If using this method of allocation, no other mira_mem_set_alloc_*() should be used.
Note
The convenience macro MIRA_SET_MEM_BUFFER(size) creates a buffer and sets it with this function.
Parameters¶
Name | Description |
---|---|
buffer | Memory block to use for storage, aligned |
size | Size of memory block |
Return value¶
Name | Description |
---|---|
MIRA_SUCCESS | Memory buffer successfully set. |
mira_mem_buffer_get_usage¶
Get current dynamic memory usage, when using the static buffer
Get the current usage in the dynamic memory buffer.
When using any other method than alloc_buffer, the return value is undefined.
Return value¶
Current memory usage in the static buffer