Creates a Allocates memory from specified segment. Returned memory block will be aligned on a CPU word boundary.
Files
lib_mem.h/lib_mem.c
Prototype
Code Block | ||
---|---|---|
Language | C++ | CaptionText | CAPTION
| ||
void *Mem_SegCreateSegAlloc (const CPU_CHAR *p_name, MEM_SEG *p_seg, CPU_ADDR seg_base_addr, CPU_SIZE_T size, CPU_SIZE_T padding_align, LIB_ERR *p_err); |
Arguments
p_name
Pointer to segment nameallocated object name. Used for allocations tracking. May be DEF_NULL
.
p_seg
Pointer to segment data . Must be allocated by caller.
seg_base_addr
Address of segment's first bytefrom which to allocate memory. Passing DEF_NULL
will allocate memory from the general-purpose heap.
size
Total size of segmentSize of memory block to allocate, in bytes.
padding_align
Padding alignment, in bytes, that will be added to any allocated buffer from this memory segment. MUST be a power of 2. LIB_MEM_SEG_PADDING_ALIGN_NONE means no padding.
p_err
Pointer to variable that will receive the return error code from this function.
LIB_MEM_ERR_NONE
LIB_MEM_ERR_INVALID_SEGMEM_SIZE
LIB_MEM_ERR_INVALID_MEM_ALIGN
LIB_MEM_ERR_NULL_PTR
LIB_MEM_ERR_INVALID_SEG_OVERLAP
LIB_MEM_ERR_INVALID_SEG_EXISTS
OVF
Returned Value
...
Pointer to allocated memory block, if successful.
DEF_NULL, otherwise.
Required Configuration
None.
Notes / Warnings
- New segments are checked for overlap with existing segments. A critical section needs to be maintained during the whole list search and add procedure to prevent a reentrant call from creating another segment overlapping with the one being added
The memory block returned by this function will be aligned on a word boundary. In order to specify a specific alignment value, use either
Mem_SegAllocExt()
orMem_SegAllocHW()
. - For an usage example of this function, refer to Memory Segments page.