📄 lib_def.h
字号:
*
* (2) Ideally, DEF_BITxx() macro's should be named DEF_BIT_xx(); however, these names already
* previously-released for bit constant #define's (see 'STANDARD DEFINES BIT DEFINES').
*********************************************************************************************************
*/
#define DEF_BIT08(bit) ((CPU_INT08U)((CPU_INT08U)1u << (bit)))
#define DEF_BIT16(bit) ((CPU_INT16U)((CPU_INT16U)1u << (bit)))
#define DEF_BIT32(bit) ((CPU_INT32U)((CPU_INT32U)1u << (bit)))
#define DEF_BIT64(bit) ((CPU_INT64U)((CPU_INT64U)1u << (bit)))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_MASK()
*
* Description : Shift a bit mask.
*
* Argument(s) : bit_mask Bit mask to shift.
*
* bit_shift Number of bit positions to left-shift bit mask.
*
* Return(s) : Shifted bit mask.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'bit_mask' SHOULD be an unsigned integer.
*
* (2) 'bit_shift' values that overflow the target CPU &/or compiler environment (e.g. negative
* or greater-than-CPU-data-size values) MAY generate compiler warnings &/or errors.
*********************************************************************************************************
*/
#define DEF_BIT_MASK(bit_mask, bit_shift) ((bit_mask) << (bit_shift))
/*
*********************************************************************************************************
* DEF_BIT_MASK_xx()
*
* Description : Shift a bit mask of specified bit size.
*
* Argument(s) : bit_mask Bit mask to shift.
*
* bit_shift Number of bit positions to left-shift bit mask.
*
* Return(s) : Shifted bit mask.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'bit_mask' SHOULD be an unsigned integer.
*
* (2) 'bit_shift' values that overflow the target CPU &/or compiler environment (e.g. negative
* or greater-than-CPU-data-size values) MAY generate compiler warnings &/or errors.
*********************************************************************************************************
*/
#define DEF_BIT_MASK_08(bit_mask, bit_shift) ((CPU_INT08U)((CPU_INT08U)(bit_mask) << (bit_shift)))
#define DEF_BIT_MASK_16(bit_mask, bit_shift) ((CPU_INT16U)((CPU_INT16U)(bit_mask) << (bit_shift)))
#define DEF_BIT_MASK_32(bit_mask, bit_shift) ((CPU_INT32U)((CPU_INT32U)(bit_mask) << (bit_shift)))
#define DEF_BIT_MASK_64(bit_mask, bit_shift) ((CPU_INT64U)((CPU_INT64U)(bit_mask) << (bit_shift)))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_FIELD()
*
* Description : Create & shift a contiguous bit field.
*
* Argument(s) : bit_field Number of contiguous bits to set in the bit field.
*
* bit_shift Number of bit positions to left-shift bit field.
*
* Return(s) : Shifted bit field.
*
* Caller(s) : Application.
*
* Note(s) : (1) (a) 'bit_field'/'bit_shift' values that overflow the target CPU &/or compiler
* environment (e.g. negative or greater-than-CPU-data-size values) MAY generate
* compiler warnings &/or errors.
*
* (b) To avoid overflowing any target CPU &/or compiler's integer data type, unsigned
* bit constant '1' is suffixed with 'L'ong integer modifier.
*
* This may still be insufficient for CPUs &/or compilers that support 'long long'
* integer data types, in which case 'LL' integer modifier should be suffixed.
* However, since almost all 16- & 32-bit CPUs & compilers support 'long' integer
* data types but many may NOT support 'long long' integer data types, only 'long'
* integer data types & modifiers are supported.
*
* See also 'DEF_BIT_FIELD_xx() Note #1b'.
*********************************************************************************************************
*/
#define DEF_BIT_FIELD(bit_field, bit_shift) ((((bit_field) >= DEF_INT_CPU_NBR_BITS) ? (DEF_INT_CPU_U_MAX_VAL) \
: (DEF_BIT(bit_field) - 1uL)) \
<< (bit_shift))
/*
*********************************************************************************************************
* DEF_BIT_FIELD_xx()
*
* Description : Create & shift a contiguous bit field of specified bit size.
*
* Argument(s) : bit_field Number of contiguous bits to set in the bit field.
*
* bit_shift Number of bit positions to left-shift bit field.
*
* Return(s) : Shifted bit field.
*
* Caller(s) : Application.
*
* Note(s) : (1) (a) 'bit_field'/'bit_shift' values that overflow the target CPU &/or compiler
* environment (e.g. negative or greater-than-CPU-data-size values) MAY generate
* compiler warnings &/or errors.
*
* (b) To avoid overflowing any target CPU &/or compiler's integer data type, unsigned
* bit constant '1' is cast to specified integer data type size.
*********************************************************************************************************
*/
#define DEF_BIT_FIELD_08(bit_field, bit_shift) ((CPU_INT08U)((((CPU_INT08U)(bit_field) >= (CPU_INT08U)DEF_INT_08_NBR_BITS) ? (CPU_INT08U)(DEF_INT_08U_MAX_VAL) \
: (CPU_INT08U)(DEF_BIT08(bit_field) - (CPU_INT08U)1u)) \
<< (bit_shift)))
#define DEF_BIT_FIELD_16(bit_field, bit_shift) ((CPU_INT16U)((((CPU_INT16U)(bit_field) >= (CPU_INT16U)DEF_INT_16_NBR_BITS) ? (CPU_INT16U)(DEF_INT_16U_MAX_VAL) \
: (CPU_INT16U)(DEF_BIT16(bit_field) - (CPU_INT16U)1u)) \
<< (bit_shift)))
#define DEF_BIT_FIELD_32(bit_field, bit_shift) ((CPU_INT32U)((((CPU_INT32U)(bit_field) >= (CPU_INT32U)DEF_INT_32_NBR_BITS) ? (CPU_INT32U)(DEF_INT_32U_MAX_VAL) \
: (CPU_INT32U)(DEF_BIT32(bit_field) - (CPU_INT32U)1u)) \
<< (bit_shift)))
#define DEF_BIT_FIELD_64(bit_field, bit_shift) ((CPU_INT64U)((((CPU_INT64U)(bit_field) >= (CPU_INT64U)DEF_INT_64_NBR_BITS) ? (CPU_INT64U)(DEF_INT_64U_MAX_VAL) \
: (CPU_INT64U)(DEF_BIT64(bit_field) - (CPU_INT64U)1u)) \
<< (bit_shift)))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_SET()
*
* Description : Set specified bit(s) in a value.
*
* Argument(s) : val Value to modify by setting specified bit(s).
*
* mask Mask of bits to set.
*
* Return(s) : Modified value with specified bit(s) set.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'val' & 'mask' SHOULD be unsigned integers.
*********************************************************************************************************
*/
#define DEF_BIT_SET(val, mask) ((val) |= (mask))
/*
*********************************************************************************************************
* DEF_BIT_CLR()
*
* Description : Clear specified bit(s) in a value.
*
* Argument(s) : val Value to modify by clearing specified bit(s).
*
* mask Mask of bits to clear.
*
* Return(s) : Modified value with specified bit(s) clear.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'val' & 'mask' SHOULD be unsigned integers.
*********************************************************************************************************
*/
#define DEF_BIT_CLR(val, mask) ((val) &= ~(mask))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_IS_SET()
*
* Description : Determine if specified bit(s) in a value are set.
*
* Argument(s) : val Value to check for specified bit(s) set.
*
* mask Mask of bits to check if set (see Note #2).
*
* Return(s) : DEF_YES, if ALL specified bit(s) are set in value.
*
* DEF_NO, if ALL specified bit(s) are NOT set in value.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'val' & 'mask' SHOULD be unsigned integers.
*
* (2) NULL 'mask' allowed; returns 'DEF_NO' since NO mask bits specified.
*********************************************************************************************************
*/
#define DEF_BIT_IS_SET(val, mask) ((((mask) != 0u) && \
(((val) & (mask)) == (mask))) ? (DEF_YES) : (DEF_NO ))
/*
*********************************************************************************************************
* DEF_BIT_IS_CLR()
*
* Description : Determine if specified bit(s) in a value are clear.
*
* Argument(s) : val Value to check for specified bit(s) clear.
*
* mask Mask of bits to check if clear (see Note #2).
*
* Return(s) : DEF_YES, if ALL specified bit(s) are clear in value.
*
* DEF_NO, if ALL specified bit(s) are NOT clear in value.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'val' & 'mask' SHOULD be unsigned integers.
*
* (2) NULL 'mask' allowed; returns 'DEF_NO' since NO mask bits specified.
*********************************************************************************************************
*/
#define DEF_BIT_IS_CLR(val, mask) ((((mask) != 0u) && \
(((val) & (mask)) == 0u)) ? (DEF_YES) : (DEF_NO ))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_IS_SET_ANY()
*
* Description : Determine if any specified bit(s) in a value are set.
*
* Argument(s) : val Value to check for specified bit(s) set.
*
* mask Mask of bits to check if set (see Note #2).
*
* Return(s) : DEF_YES, if ANY specified bit(s) are set in value.
*
* DEF_NO, if ALL specified bit(s) are NOT set in value.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'val' & 'mask' SHOULD be unsigned integers.
*
* (2) NULL 'mask' allowed; returns 'DEF_NO' since NO mask bits specified.
*********************************************************************************************************
*/
#define DEF_BIT_IS_SET_ANY(val, mask) ((((val) & (mask)) == 0u) ? (DEF_NO ) : (DEF_YES))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -