#define REG_DR 0x00 #define REG_FR 0x18 #define REG_IBRD 0x24 #define REG_FBRD 0x28 #define REG_LCRH_RX 0x2c #define REG_LCRH_TX 0x2c #define REG_CR 0x30 #define REG_IFLS 0x34 #define REG_IMSC 0x38 #define REG_RIS 0x3c #define REG_MIS 0x40 #define REG_ICR 0x44 #define REG_DR_OE (1 << 11) #define REG_DR_BE (1 << 10) #define REG_DR_PE (1 << 9)在Linux内核驱动中定义这样一串宏,当执行port->read_status_mask = REG_DR_OE | 255; if (termios->c_iflag & INPCK) port->read_status_mask |= REG_DR_FE | REG_DR_PE; if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK)) port->read_status_mask |= REG_DR_BE;这些语句,实际上会发生什么,我可以将其中的所有用到的宏,改为使用偏移,例如REG_DR_OE改为1<<11有影响吗
时间: 2023-08-29 08:11:15 浏览: 82
将宏改为使用偏移量1 << 11等价于使用宏REG_DR_OE,因为宏定义的本质就是为了提高代码的可读性和可维护性,将其替换成字面量并不会对代码的功能产生影响。但是,宏的好处是可以在不同的平台上使用相同的代码,因为不同平台的寄存器地址和标志位值可能不同,而宏可以根据平台的不同进行定义和修改,从而提高了代码的可移植性。因此,使用宏比使用字面量更为推荐。
阅读全文