对嵌入式开发中,位段操作基础做下整理总结。
1、常用位操作符
位与(&):只有1和1位于结果为1,其余全是0。
位或(|):只有0和0位或结果为0,其余全是1。
位取反(~):将操作数的二进制逐个按位取反。
位异或(^):两个位相同异或为0,不同则异或为1。
左移位(<<):(嵌入式中通常为无符号数,以无符号数为例)左移时右侧补0。
右移位(>>):(嵌入式中通常为无符号数,以无符号数为例)右移时左侧补0。
2、位操作特殊作用
特定位清0(&):data &= ~(0x1 << bit)
特定位置1(|):data |= 0x1 << bit
特定位取反(^): data ^= 0x1 << bit
总结:寄存器操作宏
// 地址定义
#define MODIFY_ADDR(object, addr) (*((object *)(addr)))
// 单bit操作
#define SET_BIT(REG, BIT) ((REG) |= (0x1U << (BIT)))
#define RST_BIT(REG, BIT) ((REG) &= ~(0x1U << (BIT)))
#define TURN_BIT(REG, BIT) ((REG) ^= (0x1U << (BIT)))
#define GET_BIT(REG, BIT) (((REG) >> (BIT)) & 0x1U)
// 多bit操作
#define READ_BIT(REG, MASK, POS) (((REG) >> (POS)) & (MASK))
#define WRITE_BIT(REG, MASK, POS, VAL) ((REG) = ((REG) & (~(MASK << (POS)))) | ((VAL) << (POS)))
// 寄存器操作
#define CLEAR_REG(REG) ((REG) = (0x0))
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
#define READ_REG(REG) ((REG))