mikrocontroller.net

Forum: Compiler & IDEs #define zusammensetzen


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Welt,

ist es möglich im GCC #defines zusammenzusetzen?

Der Plan:
#define LED1_PORT 0
#define LED1_PIN 10

#define LED1_ON IOSETLED1PORT |= (1<<LED1_PIN)

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

Autor: Marius Wensing (mw1987)
Datum:

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

MfG
Marius

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich versuchs mal anders
#define VAR1 123
#define VAR2 TEST

#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)

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Präprozoroperator ##

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

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte sich in jedem C-Buch was zu Token-Concatenation bzw. 
Token-Pasting finden.
#define CONCAT2(a,b) a##b
#define CONCAT(a,b) CONCAT2(a,b)

#define LED1_PORT 0
#define LED1_PIN 10

#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_...

Andreas

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Mit dem Präprozoroperator ##

Also so hier?
#ZUSAMMEN VAR2##VAR1

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein aber fast.

->C-Buch!

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.