#include <stdio.h>
// 定义模拟的寄存器地址
volatile unsigned int *hardware_register = (unsigned int *)0x10000000;
// 定义位操作宏
#define SET_BIT(reg, bit) ((reg) |= (1 << (bit)))
#define CLEAR_BIT(reg, bit) ((reg) &= ~(1 << (bit)))
int main() {
// 模拟硬件寄存器初值
unsigned int reg_value = 0xAA;
printf("初始寄存器值: 0x%08X\n", reg_value);
// 进行置零操作
CLEAR_BIT(reg_value, 2);
printf("置零后寄存器值: 0x%08X\n", reg_value);
// 进行置一操作
SET_BIT(reg_value, 5);
printf("置一后寄存器值: 0x%08X\n", reg_value);
// 模拟写入硬件寄存器
*hardware_register = reg_value;
return 0;
}
- 指针赋值地址的强转;
- 用或等于设置位;
- 用且等于非清空位;