www.mikrocontroller.net

Forum: Compiler & IDEs Mit Präprozessor Variable auf Existenz prüfen


Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man mit dem Präprozessor irgendwie abfragen, ob eine Variable 
existiert?
Ich möchte eine Software schreiben, die auf mehreren verschiedenen 
Controllern einer Familie läuft. Diese besitzen z.B. unterschiedliche 
Anzahlen an Pins, die ich setzen muss.
Also quasi sowas in der Art:
#if exists (PORTA)
 PORTA=0xFF;
#endif

#if exists (PORTB)
 PORTB=0xFF;
#endif

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt K. schrieb:
> Kann man mit dem Präprozessor irgendwie abfragen, ob eine Variable
> existiert?

Nein, der Präprozessor kennt keine Variablen, die kennt erst der
Compiler.

> Also quasi sowas in der Art:
>
> #if exists (PORTA)
>  PORTA=0xFF;
> #endif
> 
> #if exists (PORTB)
>  PORTB=0xFF;
> #endif
> 

Das geht, zumindest beim AVR-GCC/avr-libc, da hier PORTA usw. als
Präprozessor-Makros realisiert sind.  Ist allerdings leider nicht
portabel zu anderen Compilern, zumindest vom IAR weiß ich, dass er
die Definitionen der Ports nicht auf Präprozessor-Ebene macht.
#ifdef PORTA
...
#endif

/* bzw. */

#if defined(PORTA)
...
#endif

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke das müsste mit #ifdef PORTA funktionieren. Die Registernamen 
sind doch Präprozessormakros. Und das devicespezifische Include, 
definiert nur die vorhandenen Ports.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es handelt sich zwar um einen gcc Compiler, allerdings nicht für den 
AVR, sondern für die dsPICs von Microchip. Dort sind die Register alle 
so deklariert:
extern volatile unsigned int  PORTB __attribute__((__sfr__));
Von daher funktioniert #ifdef leider nicht.

Ich könnte zwar den Weg über den Controllernamen gehen und so 
entscheiden welche Ports ich initialisieren muss, da die Anzahl an Ports 
aber kleiner ist als die Anzahl an Controllern wäre mir der andere Weg 
lieber.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt K. schrieb:

> Ich könnte zwar den Weg über den Controllernamen gehen und so
> entscheiden welche Ports ich initialisieren muss, ...

Es wird dir dann nichts anderes übrig bleiben, als das so zu tun.

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.