位運算 --20240310

lethe1203發表於2024-03-10
位運算在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的最高位和最低位的位置。