我现在正在为微控制器使用嵌入式 C,我发现有时有几个外围设备只有一个字母不同(例如 UARTA、UARTB 等)。除了其他相同的寄存器的字母外,每个外围设备的代码通常都是相同的。例如,设置外围 AI 会执行以下操作:
UCA2CTL1 |= UCSWRST; // Put state machine in reset
UCA2CTL0 |= UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI slave
// Continue initializing peripheral registers with "A" in name
并且设置外设 BI 具有完全相同的代码,除了寄存器名称由 1 个字母转置:
UCB2CTL1 |= UCSWRST; // Put state machine in reset
UCB2CTL0 |= UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI slave
// Continue initializing peripheral registers with "B" in name
我希望能够更改目标外围设备,而无需#ifdef/复制/粘贴代码或查找/替换。是否有一些编译器指令或巧妙的技巧可以实现这种行为,这样我只需编写一次代码?我很想只 #define 外围设备中的最后一个字母,但类似的东西似乎危险地徘徊在靠近代码的地方,对我来说很臭。