Common Embedded C Macros

SET_BIT

#define SET_BIT(var, pos) ((var) |= (1U << (pos)))

CLEAR_BIT

#define CLEAR_BIT(var, pos) ((var) &= ~(1U << (pos)))

TOGGLE_BIT

#define TOGGLE_BIT(var, pos) ((var) ^= (1U << (pos)))

CHECK_BIT

#define CHECK_BIT(var, pos) ((var) & (1U << (pos)))

ABS

#define ABS(x) (((x) < 0) ? -(x) : (x))

MIN

#define MIN(a, b) (((a) < (b)) ? (a) : (b))

MAX

#define MAX(a, b) (((a) > (b)) ? (a) : (b))

CLAMP

#define CLAMP(x, min, max) (((x) < (min)) ? (min) : ((x) > (max)) ? (max) : (x))

BIT_MASK

#define BIT_MASK(width) ((1U << (width)) - 1)

BIT_FIELD

#define BIT_FIELD(var, pos, width) (((var) >> (pos)) & BIT_MASK(width))

HIGH_BYTE

#define HIGH_BYTE(var) ((uint8_t)((var) >> 8))

LOW_BYTE

#define LOW_BYTE(var) ((uint8_t)(var))

JOIN_BYTES

#define JOIN_BYTES(high, low) (((uint16_t)(high) << 8) | (low))

ARRAY_SIZE

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

ALIGN_UP

#define ALIGN_UP(x, align) (((x) + ((align) - 1)) & ~((align) - 1))

ALIGN_DOWN

#define ALIGN_DOWN(x, align) ((x) & ~((align) - 1))