位运算

位运算在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的最高位和最低位的位置。

 

 
posted @ 2024-03-10 15:10  lethe1203  阅读(8)  评论(0编辑  收藏  举报