ARM 寄存器通常整體讀寫,位操作需通過掩碼實現。本文總結置 1、清 0、讀取、組合操作的標準寫法與記憶口訣。
"|" 用來置 1 (OR) "&" 用來清 0 (AND) "<<<" 左移構建掩碼,1 從不變 清 0 要加 "~" 取反
| 操作 | 代碼模式 | 示例:位 6 |
|---|---|---|
| 置 1 | reg |= (1 << n) | reg |= (1 << 6) |
| 清 0 | reg &= ~(1 << n) | reg &= ~(1 << 6) |
| 翻轉 | reg ^= (1 << n) | reg ^= (1 << 6) |
| 讀取 | (reg >> n) & 1 | (reg >> 6) & 1 |
| 判斷是否置 1 | reg & (1 << n) | if (reg & (1 << 6)) ... |
// 清除位 2, 6, 7
reg &= ~( (1<<2) | (1<<6) | (1<<7) );
// 解析:構建掩碼 0b11000100 -> 取反 0b00111011 -> AND 清零
// 置位 3, 5
reg |= (1<<3) | (1<<5);
// 修改位 4-7 (4位域) 為值 val (0-15)
reg = (reg & ~(0xF << 4)) | ((val & 0xF) << 4);
// 步驟:清零目標域 -> 新值移位 -> OR 合成
// 打印寄存器二進制
void printReg(uint32_t reg) {
for (int i = 31; i >= 0; i--)
putchar((reg & (1<
~ 導致清零變置一1U 或 1UL)熟練掌握位操作模板,是嵌入式寄存器級開發的基本功。