左移1
 
#define _BV(PIN)  (1UL << PIN)  
 
置位与清位
 
#define  SBI(n,b) (n |= _BV(b))  //n的第b位置1
#define CBI(n,b) (n &= ~_BV(b)) //n的第b位清0
 
限制值
 
#define NOLESS(v,n) do{ if (v < n) v = n; }while(0)
#define NOMORE(v,n) do{ if (v > n) v = n; }while(0)
 
条件测试
 
#define _CAT(a, ...) a ## __VA_ARGS__
#define SWITCH_ENABLED_      1
#define ENABLED(b) _CAT(SWITCH_ENABLED_, b)
#define DISABLED(b) (!_CAT(SWITCH_ENABLED_, b))
#if ENABLED(SD)  //如果#define SD  此时为#if 1
 
数字与字符
 
#define WITHIN(V,L,H) ((V) >= (L) && (V) <= (H))
#define NUMERIC(a) WITHIN(a, '0', '9')
#define DECIMAL(a) (NUMERIC(a) || a == '.')
#define COUNT(a) (sizeof(a)/sizeof(*a))
#define ZERO(a) memset(a,0,sizeof(a))
#define COPY(a,b) memcpy(a,b,min(sizeof(a),sizeof(b)))