我正在使用嵌入式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/copy/paste代码或查找/替换。是否有一些编译器指令或巧妙的技巧可以实现这种行为,以便我只需编写一次代码?我希望只是#定义外围设备中的最后一个字母,但类似这样的东西似乎徘徊到危险地接近代码,对我来说太臭了。
有没有理由不能在这里使用一两个宏? – thelazydeveloper 2012-04-11 20:15:52
@thelazydeveloper - 我很乐意,这就是我在这里要求的。 – 2012-04-11 20:23:50
你最好不要这样做。考虑“grep UCB2CTL1 *”来查看原因。 – 2012-04-11 20:25:36