Creates a memory segmentAllocates memory from specified segment for a "hardware buffer" (a buffer that can be accessed via a DMA engine). The returned buffer will be padded in function of memory segment's properties.
Files
lib_mem.h/lib_mem.c
Prototype
Code Block | ||
---|---|---|
Language | C++ | CaptionText | CAPTION
| ||
void *Mem_SegCreateSegAllocHW (const CPU_CHAR *p_name, MEM_SEG *p_seg, CPU_ADDRSIZE_T seg_base_addrsize, CPU_SIZE_T size, align, CPU_SIZE_T padding_align, *p_bytes_reqd, 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 byte.from which to allocate memory.
size
Total size of segmentSize of memory block to allocate, in bytes.
padding_align
Padding Required alignment of memory block, in bytes, that will be added to any allocated buffer from this memory segment. MUST be a power of 2. LIB
p_
...
bytes_reqd
Pointer to variable that will receive the number of free bytes missing for the allocation to succeed. Set to DEF_NULL to skip calculation.
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
Returned Value
...
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 addedThe buffer returned by this function will be padded according to the
padding_align
argument passed at creation of this memory segment. This is particularly useful with systems that use cache memory and DMA engine to copy buffers as it guarantees that nothing else will be allocated on the same cache line (as long as thepadding_align
argument is set to the length of a cache line). - For an usage example of this function, refer to Memory Segments page.