sarmfsw: SMFSW Toolbox (for ARM & compatible with Arduino platform) 3.7
SMFSW collection of miscellaneous functions & macros (for ARM & compatible with Arduino platform)
|
ARM common macros. More...
Macros | |
#define | Undefined (-1) |
Undefined value. | |
#define | Null (0) |
Null Value. | |
#define | pNull ((void *) 0) |
Null pointer -> same as NULL in stdlib.h. | |
#define | charNull ('\0') |
Null Char. | |
#define | True true |
True alias for true | |
#define | False false |
False alias for false | |
#define | TRUE true |
TRUE alias for true | |
#define | FALSE false |
FALSE alias for false | |
#define | GET_BITS(v, b) ((v) & (b)) |
Get bits from mask b of variable v . | |
#define | SET_BITS(v, b) ((v) |= (b)) |
Set bits b of variable v . | |
#define | CLR_BITS(v, b) ((v) &= ~(b)) |
Clear bits b of variable v . | |
#define | INV_BITS(v, b) ((v) ^= (b)) |
Invert bits b of variable v . | |
#define | SET_BITS_VAL(v, m, s) ((v) = (((v) & ~(m)) | ((s) & (m)))) |
Set variable v to set value s with mask m . | |
#define | TEST_BITS_VAL(v, b) (((v) & (b)) == (b)) |
Test variable v with bits b . | |
#define | TEST_MASK_VAL(v, m, r) (((v) & (m)) == (r)) |
Test variable v with bits mask m is equal to r . | |
#define | LSHIFT(v, n) ((v) << (n)) |
Shift v n bits left. | |
#define | RSHIFT(v, n) ((v) >> (n)) |
Shift v n bits right. | |
#define | LSHIFT8(v, n) ((BYTE) ((BYTE) (v) << (n))) |
Shift v n bits left (up to 7b) | |
#define | RSHIFT8(v, n) ((BYTE) ((BYTE) (v) >> (n))) |
Shift v n bits right (up to 7b) | |
#define | LSHIFT16(v, n) ((WORD) ((WORD) (v) << (n))) |
Shift v n bits left (up to 15b) | |
#define | RSHIFT16(v, n) ((WORD) ((WORD) (v) >> (n))) |
Shift v n bits right (up to 15b) | |
#define | LSHIFT32(v, n) ((DWORD) ((DWORD) (v) << (n))) |
Shift v n bits left (up to 31b) | |
#define | RSHIFT32(v, n) ((DWORD) ((DWORD) (v) >> (n))) |
Shift v n bits right (up to 31b) | |
#define | LSHIFT64(v, n) ((LWORD) ((LWORD) (v) << (n))) |
Shift v n bits left (up to 63b) | |
#define | RSHIFT64(v, n) ((LWORD) ((LWORD) (v) >> (n))) |
Shift v n bits right (up to 63b) | |
#define | MAKEWORD(lsb, msb) ((WORD) (((BYTE) (lsb)) | LSHIFT(((WORD) (msb)), 8))) |
Make WORD from lsb and msb . | |
#define | MAKELONG(lsw, msw) ((DWORD) (((WORD) (lsw)) | LSHIFT(((DWORD) (msw)), 16))) |
Make LONG from lsw and msw . | |
#define | LOBYTE(w) ((BYTE) (w)) |
Get BYTE LSB from WORD w . | |
#define | HIBYTE(w) ((BYTE) RSHIFT((WORD) (w), 8)) |
Get BYTE MSB from WORD w . | |
#define | LOWORD(l) ((WORD) (l)) |
Get WORD LSW from LONG l . | |
#define | HIWORD(l) ((WORD) RSHIFT((DWORD) (l), 16)) |
Get WORD MSW from LONG l . | |
#define | SWAP_TYPE(a, b, typ) ({ typ c = a; a = b; b = c; }) |
Swap two variable type typ a & b . | |
#define | SWAP_BYTE(a, b) SWAP_TYPE(a, b, BYTE) |
Swap two BYTE a & b . | |
#define | SWAP_WORD(a, b) SWAP_TYPE(a, b, WORD) |
Swap two WORD a & b . | |
#define | SWAP_DWORD(a, b) SWAP_TYPE(a, b, DWORD) |
Swap two DWORD a & b . | |
#define | SWAP_LWORD(a, b) SWAP_TYPE(a, b, LWORD) |
Swap two LWORD a & b . | |
#define | SWAP_FLOAT(a, b) SWAP_TYPE(a, b, float) |
Swap two float a & b . | |
#define | SWAP_DOUBLE(a, b) SWAP_TYPE(a, b, double) |
Swap two double a & b . | |
#define | VAL_AT(addr, typ) (*(typ *) (addr)) |
Get the type typ content of address addr . | |
#define | SZ_ARRAY(arr) ((size_t) (sizeof(arr) / sizeof(arr[0]))) |
Computes the number of array elements in arr . | |
#define | SZ_OBJ(obj, typ) ((size_t) (sizeof(obj) / sizeof(typ))) |
Computes the number of elements in obj of type typ . | |
#define | SZ_TYP_MBR(typ, mbr) ((size_t) sizeof(((typ *)0)->mbr)) |
Computes the size of member mbr in struct type typ . | |
#define | TYP_MBR(typ, mbr) (((typ *)0)->mbr) |
Get member mbr from a struct type typ . | |
#define | TYP_MBR_TYP(typ, mbr) typeof(TYP_MBR(typ, mbr)) |
Get typeof member mbr from a struct type typ . | |
#define | OFFSET_OF(typ, mbr) ((size_t) &(((typ *)0)->mbr)) |
Computes the offset member mbr from struct type typ . | |
#define | ROOT_OF(ptr, typ, mbr) ((typ *) (((uint8_t *) (ptr)) - OFFSET_OF(typ, mbr))) |
Computes the address of parent struct typ of ptr from member mbr . | |
#define | CAT(a, b) a##b |
Preprocessor Name catenation of a and b (use of XCAT is highly recommended for any need) | |
#define | XCAT(a, b) CAT(a, b) |
Preprocessor Name catenation of a and b (nesting possibility) | |
#define | STR(s) #s |
Stringify s expression. | |
#define | XSTR(s) STR(s) |
Stringify the result of s expression expansion (stringification of a macro expansion) | |
#define | binEval(exp) ((exp) ? true : false) |
boolean evaluation of expression exp | |
#define | nbinEval(exp) (!binEval(exp)) |
complemented boolean evaluation of expression exp | |
#define | min MIN |
min alias for MIN | |
#define | MIN(a, b) |
Returns min value between a and b . | |
#define | max MAX |
max alias for MAX | |
#define | MAX(a, b) |
Returns max value between a and b . | |
#define | min3 MIN3 |
min3 alias for MIN3 | |
#define | MIN3(a, b, c) |
Returns min value between a , b and c . | |
#define | max3 MAX3 |
max3 alias for MAX3 | |
#define | MAX3(a, b, c) |
Returns max value between a , b and c . | |
#define | clamp CLAMP |
clamp alias for CLAMP | |
#define | CLAMP(v, mn, mx) |
Returns the value between mn and mx from val . | |
#define | OVF_DIFF(a, b) |
Returns difference of unsigned a and b (with potential overflow handling) | |
#define | SCALE_VAL(v, from_min, from_max, to_min, to_max) |
Scale value v from range from_min:from_max to range to_min:to_max . | |
#define | SCALE_VAL_T(typ, v, from_min, from_max, to_min, to_max) |
Scale typed typ value v from range from_min:from_max to range to_min:to_max . | |
#define | BYTE_TO_PERC(b) ((BYTE) ((((b) > 255U ? 255U : (b)) * 100U) / 255U)) |
#define | PERC_TO_BYTE(p) ((BYTE) ((((p) > 100U ? 100U : (p)) * 255U) / 100U)) |
Converts a p percentage (0-100) to BYTE (0-255) with max checking. | |
#define | M_1_3 (1.0 / 3.0) |
1/3 constant approximation | |
#define | M_2_3 (2.0 / 3.0) |
2/3 constant approximation | |
#define | malloc_assert(x) ((x) = malloc(sizeof(*(x))), assert((x))) |
Asserted malloc. | |
ARM common macros.
#undef
(misra-c2012-20.5)#
and ##
preprocessor operators (misra-c2012-20.10)#define binEval | ( | exp | ) | ((exp) ? true : false) |
boolean evaluation of expression exp
#define BYTE_TO_PERC | ( | b | ) | ((BYTE) ((((b) > 255U ? 255U : (b)) * 100U) / 255U)) |
BYTE
b
(0-255) to percent (0-100) #define CAT | ( | a, | |
b ) a##b |
#define charNull ('\0') |
Null Char.
#define CLAMP | ( | v, | |
mn, | |||
mx ) |
#define clamp CLAMP |
clamp
alias for CLAMP
#define CLR_BITS | ( | v, | |
b ) ((v) &= ~(b)) |
Clear bits b
of variable v
.
#define FALSE false |
FALSE
alias for false
#define False false |
False
alias for false
#define GET_BITS | ( | v, | |
b ) ((v) & (b)) |
Get bits from mask b
of variable v
.
#define INV_BITS | ( | v, | |
b ) ((v) ^= (b)) |
Invert bits b
of variable v
.
#define LOBYTE | ( | w | ) | ((BYTE) (w)) |
Get BYTE
LSB from WORD
w
.
#define LOWORD | ( | l | ) | ((WORD) (l)) |
Get WORD
LSW from LONG
l
.
#define LSHIFT | ( | v, | |
n ) ((v) << (n)) |
Shift v
n
bits left.
#define M_1_3 (1.0 / 3.0) |
1/3 constant approximation
#define M_2_3 (2.0 / 3.0) |
2/3 constant approximation
Make LONG
from lsw
and msw
.
Make WORD
from lsb
and msb
.
#define malloc_assert | ( | x | ) | ((x) = malloc(sizeof(*(x))), assert((x))) |
Asserted malloc.
#define MAX | ( | a, | |
b ) |
Returns max value between a
and b
.
#define max MAX |
max
alias for MAX
#define MAX3 | ( | a, | |
b, | |||
c ) |
Returns max value between a
, b
and c
.
#define max3 MAX3 |
max3
alias for MAX3
#define MIN | ( | a, | |
b ) |
Returns min value between a
and b
.
#define min MIN |
min
alias for MIN
#define MIN3 | ( | a, | |
b, | |||
c ) |
Returns min value between a
, b
and c
.
#define min3 MIN3 |
min3
alias for MIN3
#define nbinEval | ( | exp | ) | (!binEval(exp)) |
complemented boolean evaluation of expression exp
#define Null (0) |
Null Value.
#define OFFSET_OF | ( | typ, | |
mbr ) ((size_t) &(((typ *)0)->mbr)) |
Computes the offset member mbr
from struct type typ
.
typ
parameter would be cast instead of type.mbr
parameter shall be a structure member; will in any way raise an error in case not.#define OVF_DIFF | ( | a, | |
b ) |
Returns difference of unsigned a
and b
(with potential overflow handling)
#define PERC_TO_BYTE | ( | p | ) | ((BYTE) ((((p) > 100U ? 100U : (p)) * 255U) / 100U)) |
Converts a p
percentage (0-100) to BYTE
(0-255) with max checking.
#define pNull ((void *) 0) |
Null pointer -> same as NULL in stdlib.h.
#define ROOT_OF | ( | ptr, | |
typ, | |||
mbr ) ((typ *) (((uint8_t *) (ptr)) - OFFSET_OF(typ, mbr))) |
Computes the address of parent struct typ
of ptr
from member mbr
.
mbr
parameter shall be a structure member; will in any way raise an error in case not.#define RSHIFT | ( | v, | |
n ) ((v) >> (n)) |
Shift v
n
bits right.
#define SCALE_VAL | ( | v, | |
from_min, | |||
from_max, | |||
to_min, | |||
to_max ) |
Scale value v
from range from_min:from_max
to range to_min:to_max
.
#define SCALE_VAL_T | ( | typ, | |
v, | |||
from_min, | |||
from_max, | |||
to_min, | |||
to_max ) |
Scale typed typ
value v
from range from_min:from_max
to range to_min:to_max
.
#define SET_BITS | ( | v, | |
b ) ((v) |= (b)) |
Set bits b
of variable v
.
#define SET_BITS_VAL | ( | v, | |
m, | |||
s ) ((v) = (((v) & ~(m)) | ((s) & (m)))) |
Set variable v
to set value s
with mask m
.
#define STR | ( | s | ) | #s |
Stringify s
expression.
#define SWAP_DOUBLE | ( | a, | |
b ) SWAP_TYPE(a, b, double) |
Swap two double
a
& b
.
#define SWAP_FLOAT | ( | a, | |
b ) SWAP_TYPE(a, b, float) |
Swap two float
a
& b
.
#define SWAP_TYPE | ( | a, | |
b, | |||
typ ) ({ typ c = a; a = b; b = c; }) |
Swap two variable type typ
a
& b
.
typ
parameter would be cast instead of type declaration (thus raising error); other parameters shall be variable names, raising error otherwise is intended.#define SZ_ARRAY | ( | arr | ) | ((size_t) (sizeof(arr) / sizeof(arr[0]))) |
Computes the number of array elements in arr
.
arr
shall be an instance of type; raising error otherwise is intended.#define SZ_OBJ | ( | obj, | |
typ ) ((size_t) (sizeof(obj) / sizeof(typ))) |
Computes the number of elements in obj
of type typ
.
obj
parameter can be a type instead of an istance of type.typ
parameter would be cast instead of type.#define SZ_TYP_MBR | ( | typ, | |
mbr ) ((size_t) sizeof(((typ *)0)->mbr)) |
Computes the size of member mbr
in struct type typ
.
typ
parameter would be cast instead of type.mbr
parameter shall be a structure member; will in any way raise an error in case not.#define TEST_BITS_VAL | ( | v, | |
b ) (((v) & (b)) == (b)) |
Test variable v
with bits b
.
#define TEST_MASK_VAL | ( | v, | |
m, | |||
r ) (((v) & (m)) == (r)) |
Test variable v
with bits mask m
is equal to r
.
#define TRUE true |
TRUE
alias for true
#define True true |
True
alias for true
#define TYP_MBR | ( | typ, | |
mbr ) (((typ *)0)->mbr) |
Get member mbr
from a struct type typ
.
typ
parameter would be cast instead of type.mbr
parameter shall be a structure member; will in any way raise an error in case not.#define TYP_MBR_TYP | ( | typ, | |
mbr ) typeof(TYP_MBR(typ, mbr)) |
Get typeof member mbr
from a struct type typ
.
typeof
C language extension should only be used to get a compiler native known type #define Undefined (-1) |
Undefined value.
#define VAL_AT | ( | addr, | |
typ ) (*(typ *) (addr)) |
Get the type typ
content of address addr
.
typ
parameter would be cast instead of type.#define XCAT | ( | a, | |
b ) CAT(a, b) |
Preprocessor Name catenation of a
and b
(nesting possibility)
#define XSTR | ( | s | ) | STR(s) |
Stringify the result of s
expression expansion (stringification of a macro expansion)