Hi,
ich möchte mittels Präprozessordirektiven Ausgänge schalten und mir die
Schreibarbeit wesentlich vereinfachen. Im Moment benutze ich diese
defines.
1 | #define CLEAR_LED (PORTD &= ~_BV(PD4))
|
2 | #define SET_LED (PORTD |= _BV(PD4))
|
3 | #define TOGGLE_LED (PORTD ^= _BV(PD4))
|
4 | #define Z_LED (PORTD & _BV(PD4))
|
5 | #define OUT_LED (DDRD |= _BV(PD4))
|
Nun möchte ich z.B. sowas machen
1 | #define AUSGANG1 PORTD,PD7
|
2 | #define TOGGLE(x,y) (#x ^= _BV(#y))
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | DDRD |= _BV(PD7);
|
7 | TOGGLE(AUSGANG1);
|
8 | }
|
Das geht jedoch leider nicht. Noch schöner wäre natürlich wenn ich die
defines wie oben so .... verwenden könnte (????xxxx???? soll dabei ein
Platzhalter für die Anweisung sein die ich gerne wissen möchte, falls
das überhaupt möglich ist!)
1 | #define AUSGANG1 ????xxxx????
|
2 | #define AUSGANG2 ????xxxx????
|
3 | #define AUSGANG3 ????xxxx????
|
4 |
|
5 | #define TOGGLE(x) ????xxxx????
|
6 | #define OUT(x) ????xxxx????
|
7 | #define SET(x) ????xxxx????
|
8 | ...
|
9 |
|
10 | int main(void)
|
11 | {
|
12 | OUT(AUSGANG1);
|
13 | OUT(AUSGANG2);
|
14 |
|
15 | TOGGLE(AUSGANG1);
|
16 | SET(AUSGANG3);
|
17 | }
|
Das heißt bei Ausgang müsste irgendwie sowas wie PD7 angegeben werden,
und die funktionen weiter unten müssten das D und die 7 extrahieren und
dementsprechend in die defines ganz oben einsetzen!
Ist das irgendwie möglich???