Template of a synchronised memory pool with block type and local storage. More...
#include <cmsis-plus/rtos/os.h>
Public Types | |
using | allocator_type = memory::allocator< thread::stack::allocation_element_t > |
Default RTOS allocator. | |
using | size_t = uint16_t |
Type of memory pool size storage. | |
using | value_type = T |
Local type of message. | |
Public Member Functions | |
template<typename T > | |
constexpr std::size_t | compute_allocated_size_bytes (std::size_t blocks, std::size_t block_size_bytes) |
Calculator for pool storage requirements. | |
Constructors & Destructor | |
memory_pool_inclusive (const attributes &attr=initializer) | |
Construct a memory pool object instance. | |
memory_pool_inclusive (const char *name, const attributes &attr=initializer) | |
Construct a named memory pool object instance. | |
virtual | ~memory_pool_inclusive () override |
Destruct the memory pool object instance. | |
Public Member Functions | |
value_type * | alloc (void) |
Allocate a memory block. | |
value_type * | try_alloc (void) |
Allocate a memory block. | |
value_type * | timed_alloc (clock::duration_t timeout) |
Allocate a memory block with timeout. | |
result_t | free (value_type *block) |
Free the memory block. | |
Operators | |
bool | operator== (const memory_pool &rhs) const |
Compare memory pools. | |
Public Member Functions | |
result_t | free (void *block) |
Free the memory block. | |
std::size_t | capacity (void) const |
Get memory pool capacity. | |
std::size_t | count (void) const |
Get blocks count. | |
std::size_t | block_size (void) const |
Get block size. | |
bool | empty (void) const |
Check if the memory pool is empty. | |
bool | full (void) const |
Check if the memory pool is full. | |
result_t | reset (void) |
Reset the memory pool. | |
void * | pool (void) |
Get the pool storage address. | |
Public Member Functions | |
const char * | name (void) const |
Get object name. | |
Static Public Member Functions | |
Operators | |
static void * | operator new (std::size_t bytes) |
Allocate space for a new object instance using the RTOS system allocator. | |
static void * | operator new (std::size_t bytes, void *ptr) |
Emplace a new object instance. | |
static void * | operator new[] (std::size_t bytes) |
Allocate space for an array of new object instances using the RTOS system allocator. | |
static void * | operator new[] (std::size_t bytes, void *ptr) |
Emplace an array of new object instances. | |
static void | operator delete (void *ptr, std::size_t bytes) |
Deallocate the dynamically allocated object instance. using the RTOS system allocator. | |
static void | operator delete[] (void *ptr, std::size_t bytes) |
Deallocate the dynamically allocated array of object. instances using the RTOS system allocator. | |
Static Public Attributes | |
static const std::size_t | blocks = N |
Local constant based on template definition. | |
static const attributes | initializer |
Default memory pool initialiser. | |
static constexpr memory_pool::size_t | max_size |
Maximum pool size. | |
Protected Attributes | |
Private Member Variables | |
arena< void *, blocks, sizeof(T)> | arena_ |
Local storage for the pool. | |
Template of a synchronised memory pool with block type and local storage.
Definition at line 761 of file os-mempool.h.
|
inherited |
Default RTOS allocator.
Definition at line 201 of file os-mempool.h.
using os::rtos::memory_pool_inclusive< T, N >::value_type = T |
Local type of message.
Definition at line 768 of file os-mempool.h.
os::rtos::memory_pool_inclusive< T, N >::memory_pool_inclusive | ( | const attributes & | attr = initializer | ) |
Construct a memory pool object instance.
[in] | attr | Reference to attributes. |
This constructor shall initialise a memory pool object with attributes referenced by attr. If the attributes specified by attr are modified later, the memory pool attributes shall not be affected. Upon successful initialisation, the state of the memory pool variable shall become initialised.
Only the memory pool itself may be used for allocations. It is not allowed to make copies of condition variable objects.
In cases where default memory pool attributes are appropriate, the variable memory_pool::initializer
can be used to initialise condition variables. The effect shall be equivalent to creating a memory pool object with the simple constructor.
The storage shall be statically allocated inside the memory pool object instance.
Implemented as a wrapper over the parent constructor, automatically passing the message size and the storage details.
Definition at line 1302 of file os-mempool.h.
os::rtos::memory_pool_inclusive< T, N >::memory_pool_inclusive | ( | const char * | name, |
const attributes & | attr = initializer |
||
) |
Construct a named memory pool object instance.
[in] | name | Pointer to name. |
[in] | attr | Reference to attributes. |
This constructor shall initialise a named memory pool object with attributes referenced by attr. If the attributes specified by attr are modified later, the memory pool attributes shall not be affected. Upon successful initialisation, the state of the memory pool variable shall become initialised.
Only the memory pool itself may be used for allocations. It is not allowed to make copies of condition variable objects.
In cases where default memory pool attributes are appropriate, the variable memory_pool::initializer
can be used to initialise condition variables. The effect shall be equivalent to creating a memory pool object with the simple constructor.
The storage shall be statically allocated inside the memory pool object instance.
Implemented as a wrapper over the parent constructor, automatically passing the message size and the storage details.
Definition at line 1335 of file os-mempool.h.
|
overridevirtual |
Destruct the memory pool object instance.
This destructor shall destroy the memory pool object; the object becomes, in effect, uninitialised. An implementation may cause the destructor to set the object to an invalid value.
It shall be safe to destroy an initialised memory pool object upon which no threads are currently blocked. Attempting to destroy a memory pool object upon which other threads are currently blocked results in undefined behaviour.
Definition at line 1357 of file os-mempool.h.
|
inline |
Allocate a memory block.
nullptr
if interrupted.Wrapper over the parent method, automatically passing the cast.
Definition at line 1370 of file os-mempool.h.
|
inlineinherited |
Get block size.
Definition at line 931 of file os-mempool.h.
|
inlineinherited |
Get memory pool capacity.
Definition at line 922 of file os-mempool.h.
|
inlineconstexprinherited |
Calculator for pool storage requirements.
blocks | Number of blocks. |
block_size_bytes | Size of block. |
Definition at line 188 of file os-mempool.h.
|
inlineinherited |
Get blocks count.
Definition at line 940 of file os-mempool.h.
|
inlineinherited |
Check if the memory pool is empty.
true | The memory pool has no allocated blocks. |
false | The memory pool has allocated blocks. |
Definition at line 949 of file os-mempool.h.
|
inline |
Free the memory block.
result::ok | The memory block was released. |
EINVAL | The block does not belong to the memory pool. |
Wrapper over the parent method, automatically passing the cast.
Definition at line 1412 of file os-mempool.h.
|
inherited |
Free the memory block.
[in] | block | Pointer to memory block to free. |
result::ok | The memory block was released. |
EINVAL | The block does not belong to the memory pool. |
Return a memory block previously allocated by alloc()
back to the memory pool.
It uses a critical section to protect simultaneous access from other threads or interrupts.
Definition at line 783 of file os-mempool.cpp.
|
inlineinherited |
Check if the memory pool is full.
true | All memory blocks are allocated. |
false | There are still memory blocks that can be allocated. |
Definition at line 958 of file os-mempool.h.
|
inlineinherited |
Get object name.
All objects return a non-null string; anonymous objects return "-"
.
Definition at line 759 of file os-decls.h.
|
inlinestaticinherited |
Deallocate the dynamically allocated object instance. using the RTOS system allocator.
ptr | Pointer to object. |
bytes | Number of bytes to deallocate. |
The deallocation function (3.7.4.2) called by a delete-expression to render the value of ptr invalid.
ptr shall be a null pointer or its value shall be a value returned by an earlier call to the (possibly replaced) operator new() which has not been invalidated by an intervening call to operator delete(void*).
If ptr is null, does nothing. Otherwise, reclaims the storage allocated by the earlier call to operator new.
The storage is deallocated using the RTOS system allocator.
Definition at line 122 of file os-inlines.h.
|
inlinestaticinherited |
Deallocate the dynamically allocated array of object. instances using the RTOS system allocator.
ptr | Pointer to array of objects. |
bytes | Number of bytes to deallocate. |
The deallocation function (3.7.4.2) called by the array form of a delete-expression to render the value of ptr invalid.
If ptr is null, does nothing. Otherwise, reclaims the storage allocated by the earlier call to operator new.
The storage is deallocated using the RTOS system allocator.
Definition at line 143 of file os-inlines.h.
|
inlinestaticinherited |
Allocate space for a new object instance using the RTOS system allocator.
bytes | Number of bytes to allocate. |
The allocation function (3.7.4.1) called by a new-expression (5.3.4) to allocate a storage of size bytes suitably aligned to represent any object of that size. Return a non-null pointer to suitably aligned storage (3.7.4).
The storage is allocated using the RTOS system allocator.
Definition at line 44 of file os-inlines.h.
|
inlinestaticinherited |
Emplace a new object instance.
bytes | Number of bytes to emplace. |
ptr | Pointer to location to emplace the object. |
The allocation function (3.7.4.1) called by a placement new-expression to allocate a storage of size bytes suitably aligned to represent any object of that size. Return a non-null pointer to suitably aligned storage (3.7.4).
The storage is allocated using the RTOS system allocator.
Definition at line 81 of file os-inlines.h.
|
inlinestaticinherited |
Allocate space for an array of new object instances using the RTOS system allocator.
bytes | Number of bytes to allocate. |
The allocation function (3.7.4.1) called by the array form of a new-expression (5.3.4) to allocate a storage of size bytes suitably aligned to represent any array object of that size or smaller.
The storage is allocated using the RTOS system allocator.
Definition at line 62 of file os-inlines.h.
|
inlinestaticinherited |
Emplace an array of new object instances.
bytes | Number of bytes to emplace. |
ptr | Pointer to location to emplace the object. |
The allocation function (3.7.4.1) called by the array form of a placement new-expression to allocate a storage of size bytes suitably aligned to represent any array object of that size or smaller.
The storage is allocated using the RTOS system allocator.
Definition at line 98 of file os-inlines.h.
|
inlineinherited |
Compare memory pools.
true | The given memory pool is the same as this memory pool. |
false | The memory pools are different. |
Identical memory pools should have the same memory address.
Definition at line 913 of file os-mempool.h.
|
inlineinherited |
Get the pool storage address.
Definition at line 967 of file os-mempool.h.
|
inherited |
Reset the memory pool.
result::ok | The memory pool was reset. |
EPERM | Cannot be invoked from an Interrupt Service Routines. |
Reset the memory pool to the initial state, with all blocks free.
Definition at line 843 of file os-mempool.cpp.
|
inline |
Allocate a memory block with timeout.
[in] | timeout | Timeout to wait, in clock units (ticks or seconds). |
nullptr
if timeout.Wrapper over the parent method, automatically passing the cast.
Definition at line 1398 of file os-mempool.h.
|
inline |
Allocate a memory block.
nullptr
if no memory available.Wrapper over the parent method, automatically passing the cast.
Definition at line 1384 of file os-mempool.h.
|
protected |
Local storage for the pool.
The local storage is large enough to include blocks
blocks of type T
. For performance reasons, the individual components are aligned as pointers.
Definition at line 835 of file os-mempool.h.
|
static |
Local constant based on template definition.
Definition at line 773 of file os-mempool.h.