These macros copy data values from any CPU memory address to any other memory address.
Files
lib_mem.h
Prototypes
MEM_VAL_COPY_08(addr_dest, addr_src); MEM_VAL_COPY_16(addr_dest, addr_src); MEM_VAL_COPY_32(addr_dest, addr_src); MEM_VAL_COPY(addr_dest, addr_src, val_size);
Arguments
addr_dest
Lowest CPU memory address to copy source address’s data value.
addr_src
Lowest CPU memory address of the data value to copy.
val_size
Number of data value octets to copy.
Returned Value
None.
Required Configuration
None.
Notes / Warnings
CPU memory addresses/pointers not checked for NULL
nor overlapping memory addresses which may result in undefined copy behavior.
MEM_VAL_COPY_xxx()
macros copy data values based on CPU’s native data-word order.
MEM_VAL_COPY_xxx()
macros copy data values without regard to CPU word-aligned addresses. Thus for processors that require data word alignment, data words can be copied to/from any CPU addresses, word-aligned or not, without generating data-word-alignment exceptions/faults.
Fixed-size copy MEM_VAL_COPY_xxx()
macros are more efficient than dynamic-size copy MEM_VAL_COPY()
macro and should be used whenever possible.
MEM_VAL_COPY_xxx()
macros are not atomic operations and must not be used on any non-static (i.e., volatile) variables, registers, hardware, etc; without the caller of the macros providing some form of additional protection (e.g. mutual exclusion).
Example Usage
CPU_INT16U *pmem; CPU_INT16U *pval; pmem = &SomeAddr; /* Any CPU address */ pval = &SomeVal; /* Any CPU address */ MEM_VAL_COPY_16(pmem, pval);