Forum: Compiler & IDEs Frage zum preprocessor Macros in Macros.


von Andreas H. (andreas_h51)


Lesenswert?

Hallo,
ich hätte gern eine allgemeine Funktion um Pins ein und auszuschalten 
damit ich Pins mit einem einfachen allgemeinem Befehl an und 
auszuschalten und allgemein Register konfigurieren...

Überlegt hab ich mir folgendes:
1
#define PHASE_A 0,C
2
3
#define SetON(PIN,Name) PORT##Name |= (1<<P##Name##PIN)
damit ich dann nur noch :
1
SetON(PHASE_A);
schreiben muss.
leider bekomme ich den Fehler:
1
Fehler  1  macro "SetON" requires 2 arguments, but only 1 given
wobei:
1
SetON(0,C); // funktioniert einwandfrei..
nach längerem googeln bin ich net groß weiter gekommen ich bin nicht mal 
sicher ob das überhaut mit C so funktioniert. Ich mein mir ist klar das 
problem liegt daran das erst beim ersetzten des inneren ausdrucks der 
äußere gültig ist. Nur wie bring ich das dem preprocessor bei.

danke schon mal für Tipps

von Uwe (de0508)


Lesenswert?

So geht das, ob die Defines |P##| stimmen, habe ich nicht überprüft.
1
#define SetON2(PIN,Name) (PORT##Name) |= (1<<P##Name##PIN)
2
#define SetON(def) SetON2(def)

von Andreas H. (andreas_h51)


Lesenswert?

hey danke,
funktioniert :)
die P## sollten passen

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.