位运算
位运算在linux内核或裸驱中使用十分常见,下面是两种使用方式在此记录:
对寄存器进行操作:
举个例子,
1、清除bit8-bit10,并将bit8-bit10设置为0x2
reg = (reg & (~(0x7 << 8)) | (0x2 << 8));
2、将bit4置一和置零
reg = (reg & (~(0x1<<4))) | (0x0 << 4); // bit4置零 reg = (reg & (~(0x1<<4))) | (0x1 << 4); // bit4置一
实际应用:
#define BIT(nr) (1UL << (nr)) // 指定nr位置设置为1 #ifdef CONFIG_ARM64 #define BITS_PER_LONG 64 #else #define BITS_PER_LONG 32 #define GENMASK(h, l) \ (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) // 生成一个位掩码,其中参数h和l分别表示要设置为1的最高位和最低位的位置。