tbm-mcu/include/macros.h

39 lines
999 B
C
Raw Normal View History

2017-02-27 15:34:41 +00:00
#pragma once
#ifdef STM32F0
#define PRSZu "u"
#else
#define PRSZu "zu"
#endif
#include <limits.h>
2017-07-24 17:57:13 +02:00
#include <stdarg.h>
2017-02-27 15:34:41 +00:00
#define min(x, y) ((x < y) ? (x) : (y))
#define max(x, y) ((x > y) ? (x) : (y))
/* Human-readable sizes */
#define KIB 1024
#define MIB (1024 * KIB)
2017-04-07 18:34:32 +02:00
#define GIB (1024 * MIB)
2017-07-24 17:57:13 +02:00
#define container_of(ptr, type, member) \
(type *)((char *)ptr - offsetof(type, member))
/* Rounding */
#define IS_ROUND(x, k) (!((x) & ((k) - 1)))
#define ROUND_DOWN(x, k) ((x) & ~((k) - 1))
#define ROUND_UP(x, k) (((x) + (k) - 1) & ~((k) - 1))
#define mask(x, k) ((x) & ((1 << (k)) - 1))
2017-05-19 18:29:17 +02:00
#define align(x, k) ((x) & ~((1 << (k)) - 1))
2017-05-29 16:39:44 +02:00
#define align_up(x, k) align(x + ((1 << (k)) - 1), k)
#define is_aligned(x, k) (!((x) & ((1 << (k)) - 1)))
#define align_eq(x, y, k) (!(((x) ^ (y)) >> k))
/* Bit manipulation */
#define BIT_SIZE(t) (CHAR_BIT * sizeof(t))
#define BIT(n) (1 << (n))
#define BITS(_start, _end) ((BIT(_end) - BIT(_start)) + BIT(_end))
2017-08-01 15:48:16 +02:00
#define BIT_MASK(x, k) ((x) & ((1 << (k)) - 1))