Forum: Compiler & IDEs #define zusammensetzen


von Max (Gast)


Lesenswert?

Hallo Welt,

ist es möglich im GCC #defines zusammenzusetzen?

Der Plan:
1
#define LED1_PORT 0
2
#define LED1_PIN 10
3
4
#define LED1_ON IOSETLED1PORT |= (1<<LED1_PIN)

Wie kann ich IOSET und LED1_PORT zu IOSET0 verknüpfen?

von Marius W. (mw1987)


Lesenswert?

Bitte WAS wollst du? Beschreib mal dein Problem genauer, sonst kann und 
will dir hier sicher niemand helfen...

MfG
Marius

von sebastians (Gast)


Lesenswert?

Meinst du sowas?
1
#define LED1_PORT PORTA
2
#define LED1_PIN  5 /* Eine Zahl <= 7 */
3
4
#define LED1_ON LED1_PORT |= (1<<LED1_PIN)
ja, das geht.

von Max (Gast)


Lesenswert?

Ok, ich versuchs mal anders
1
#define VAR1 123
2
#define VAR2 TEST
3
4
#define ZUSAMMEN ???

Wie muss ??? aussehen, damit später im Code "ZUSAMMEN" durch "TEST123" 
ersetzt wird?

Ziel ist es wie oben beschrieben, Ports vom LPC2xxx komfortabel zu 
configurieren.
Es wird ja immer wieder die Portnummer benötigt (IOSET0, IOCLR0, etc)

von Max (Gast)


Lesenswert?

sebastians schrieb:
> Meinst du sowas?#define LED1_PORT PORTA
> #define LED1_PIN  5 /* Eine Zahl <= 7 */
>
> #define LED1_ON LED1_PORT |= (1<<LED1_PIN)
> ja, das geht.

Naja fast, jetzt gilt es noch PORT und A zu trennen da beim LPC die 
Zugriffe getrennt via IOSET(Portnummer) und IOCLR(Portnummer) 
stattfinden. Dann kommt noch die Datenrichtung mit IODIR(Portnummer) 
hinzu.

von Klaus W. (mfgkw)


Lesenswert?

Mit dem Präprozoroperator ##

Dazu gibt es hier etliche Artikel, siehe auch das C-Buch deines 
Vertrauens

von Andreas F. (aferber)


Lesenswert?

Eigentlich sollte sich in jedem C-Buch was zu Token-Concatenation bzw. 
Token-Pasting finden.
1
#define CONCAT2(a,b) a##b
2
#define CONCAT(a,b) CONCAT2(a,b)
3
4
#define LED1_PORT 0
5
#define LED1_PIN 10
6
7
#define LED1_ON CONCAT(IOSET, LED1_PORT) |= (1 << LED1_PIN)

Hier steht auch, warum es zwei Makro-Ebenen braucht:

http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation

Andreas

von Max (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Mit dem Präprozoroperator ##

Also so hier?
1
#ZUSAMMEN VAR2##VAR1

von Max (Gast)


Lesenswert?

Max schrieb:
> Klaus Wachtler schrieb:
>> Mit dem Präprozoroperator ##
>
> Also so hier?#ZUSAMMEN VAR2##VAR1

Ups, da fehlt noch das define.

Sehe aber gerade oben, dass es doch komplizierter ist. Vielen Dank, 
schaue ich mir morgen mal an.

von Klaus W. (mfgkw)


Lesenswert?

Nein aber fast.

->C-Buch!

von Sven P. (Gast)


Lesenswert?

Und nicht wundern, Token-Pasting ist magisch und hat bisweilen die 
erstaunlichsten Wirkungen :-)

von Max (Gast)


Lesenswert?

Sven P. schrieb:
> Und nicht wundern, Token-Pasting ist magisch und hat bisweilen die
> erstaunlichsten Wirkungen :-)

Wie meinst Du das? Ist es nicht zu empfehlen?

@Andreas Ferber
Hab es doch heute noch ausprobiert. Funktioniert prima. Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.