Mit Präprozessor Variable auf Existenz prüfen

OP #1504320
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:
1
#if exists (PORTA)
2
 PORTA=0xFF;
3
#endif
4

5
#if exists (PORTB)
6
 PORTB=0xFF;
7
#endif
Moderator Persönliche Seite #1504328
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:
>
1
> #if exists (PORTA)
2
>  PORTA=0xFF;
3
> #endif
4
> 
5
> #if exists (PORTB)
6
>  PORTB=0xFF;
7
> #endif
8
>

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.
1
#ifdef PORTA
2
...
3
#endif
4

5
/* bzw. */
6

7
#if defined(PORTA)
8
...
9
#endif
OP #1504340
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:
1
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren