Ich arbeite gerade mit embedded C für einen Mikrocontroller und finde, dass es manchmal mehrere Peripheriegeräte gibt, die sich nur durch einen Buchstaben unterscheiden (zB UARTA, UARTB, etc). Der Code für jedes Peripheriegerät ist oft identisch mit Ausnahme der Beschriftung ansonsten identischer Register. Zum Beispiel der Einrichtung würde periphere AI so etwas wie:Gibt es eine Compiler - Anweisung, um einen Teil einer Konstanten zu ersetzen?
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
Und die Einrichtung peripherer BI haben genau den gleichen Code, mit der Ausnahme, dass die Registernamen von 1 Brief umgesetzt werden:
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
Ich mag die Fähigkeit haben, zu ändern, welches Peripheriegerät ich anvisiere, ohne # ifdef/copy/paste code oder find/replace zu haben. Gibt es eine Compiler-Direktive oder einen cleveren Trick, der dieses Verhalten implementiert, so dass ich den Code nur einmal schreiben muss? Ich würde gerne nur den letzten Buchstaben in der Peripherie definieren, aber so etwas scheint mir gefährlich zu werden.
Gibt es einen Grund, warum Sie hier nicht einfach ein oder zwei Makros verwenden können? – thelazydeveloper
@thelazydeveloper - Ich würde gerne, darum bitte ich hier. –
Sie sind eigentlich besser dran, dies NICHT zu tun. Betrachten Sie "Grep UCB2CTL1 *", um zu sehen, warum. –