Preprozessor bedingte Verknüpfung

Gast #712157
Hallo Alle zusammen,

ich habe eine Frage zum Preprozessor:

ich möchte mir eine Headerdatei einbinden. Nennen wir sie mal 
"mydefs.h".

Also im "main.c" = #include "mydefs.h"

In der *.h möchte ich nun verschiedene Initialwerte definieren und 
setzen z.B.

#define Datenport PORTB      //Ausgang für Daten
#define ON        5          // PB5 ist die "ON"- LED
#define Start     6          // PB6 ist die "Start"-LED

....

soweit... so gut! Jetzt möchte ich entweder im Programm
(z.B. unter init_HW();)
oder schon im Preprozessor auch die Datenrichtung automatisch setzen. 
Ich hab's probiert mit:

#if Datenport==PORTA
 #define DDRA 0xFF
#elif Datenport==PORTB
 #define DDRB 0xFF
...
#endif

funktioniert aber nich...

Wie läßt sich so eine Abfrage elegant lösen?

Danke und Gruß Holger
Du hast eine falsche Vorstellung davon, was der Präprozessor
macht.
Der Präprozessor macht reine Textersetzungen im Code. Mehr
nicht. Im Grunde ist das ein Texteditor der seine Kommandos
aus dem Text bezieht den er bearbeitet.

Da aber die Programmierung der Datenrichtung an einem Port
eine Aktion ist, die das Programm ausführen muss, muss das
zwangsweise im Programm selbst als ausführbare Anweiung
passieren.
Moderator Persönliche Seite
Allerdings kann man den Präprozessor gut dafür benutzen, die
entsprechenden Namen zusammenzusetzen.

defines.h:
1
...
2
/* HD44780 LCD port connections */
3
#define HD44780_PORT A
4
...

hd44780.c:
1
#include "defines.h"
2

3
#define GLUE(a, b)     a##b
4
#define PORT(x)        GLUE(PORT, x)
5
#define PIN(x)         GLUE(PIN, x)
6
#define DDR(x)         GLUE(DDR, x)
7

8
#define HD44780_PORTOUT    PORT(HD44780_PORT)
9
#define HD44780_PORTIN     PIN(HD44780_PORT)
10
#define HD44780_DDR        DDR(HD44780_PORT)
11
...
12
void
13
hd44780_init(void)
14
{
15

16
  HD44780_DDR = _BV(HD44780_RS) | _BV(HD44780_RW) | _BV(HD44780_E)
17
    | HD44780_DATABITS;
18
...
19
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.