#ifndef COMMON__H #define COMMON__H #include #include #include #define WEAK __attribute__((weak)) #define NORETURN __attribute__((noreturn)) #ifndef static_assert #define static_assert(a, b) #endif /* Define __IO to be volatile if it's not already. */ #ifndef __IO #define __IO volatile #endif #define CTZ(n) __builtin_ctz(n) #define bool int #ifndef __cplusplus #define true 1 #define false 0 #endif #define PACKED __attribute__((packed)) #define BIT(n) (1 << (n)) #define RESERVED_CONCAT_IMPL(x, y) x ## y #define RESERVED_MACRO_CONCAT(x, y) RESERVED_CONCAT_IMPL(x, y) #define RESERVED(n) \ bits_t RESERVED_MACRO_CONCAT(_r, __COUNTER__) :n #define RESERVE(type) \ __IO type RESERVED_MACRO_CONCAT(_r, __COUNTER__) #define ptr2reg(ptr) \ ((uint32_t) (ptrdiff_t) (ptr)) typedef __IO uint32_t bits_t; #define regset(reg, mask, val) \ ((reg) = ((reg) & ~mask) | (val << CTZ(mask))) #endif /* COMMON_H */