DEF_BIT_FIELD_xx()
Creates a contiguous, multi-bit bit field.
Files
lib_def.h
Prototypes
DEF_BIT_FIELD(bit_field, bit_shift); DEF_BIT_FIELD_08(bit_field, bit_shift); DEF_BIT_FIELD_16(bit_field, bit_shift); DEF_BIT_FIELD_32(bit_field, bit_shift); DEF_BIT_FIELD_64(bit_field, bit_shift);
Arguments
bit_field
Number of contiguous bits to set in the bit field.
bit_shift
Number of bit positions to left-shift the bit field.
Returned Value
Contiguous bit field of bit_field
number of bits left-shifted by bit_shift
number of bits.
Required Configuration
None.
Notes / Warnings
bit_field
and bit_shift
should be non-negative integers.
bit_field/bit_shift
values that overflow the target CPU and/or compiler environment (e.g. negative or greater-than-CPU-data-size values) may generate compiler warnings and/or errors.
To avoid overflowing any target CPU and/or compiler’s integer data type, unsigned bit constant 1
is either cast to specified integer data type size or suffixed with long
integer modifier, ‘L
’. This may still be insufficient for CPUs and/or compilers that support long long
integer data types, in which case ‘LL
’ integer modifier should be suffixed. However, since almost all 16- and 32-bit CPUs and compilers support long
integer data types but many may not support long long
integer data types, only long
integer data types and modifiers are supported.
Example Usage
CPU_INT08U upper_nibble; CPU_INT32U mask_32; upper_nibble = DEF_BIT_FIELD(4u, 4u); mask_32 = DEF_BIT_FIELD_16(7u, 13u); /* 16-bit shift macro overflows; sets mask_32 = 0x0000E000 */ mask_32 = DEF_BIT_FIELD_16(7u, 23u); /* 16-bit shift macro overflows; sets mask_32 = 0 */ mask_32 = DEF_BIT_FIELD_32(7u, 23u); /* 32-bit shift macro correctly sets mask_32 = 0x3F800000 */