Präprozessor #if Vergleich

OP #2936179
Lesenswert?

Hallo,

möchte in meinem Quelltext prüfen, ob F_CPU definiert ist gleichzeitig 
sicherstellen, dass dieser auf die gewünschte Frequenz eingestellt ist.

Dazu:
1
/* F_CPU definiert? Falls nicht, setzte es auf 32e6UL. */
2
#ifndef F_CPU
3
#define F_CPU 32e6UL
4
#endif
5

6
/* Falls F_CPU defeniert (in anderern Header Dateien), prüfe ob F_CPU==32e6UL. */
7
#if (F_CPU != 32e6)
8
#error F_CPU ist ungleich 32e6
9
#endif

Beim der Zeile
1
#if (F_CPU != 32e6)
bekomme ich den Fehler
1
floating constant in preprocessor expression

Was mache ich falsch?
Gast #2936186
Lesenswert?

du brauchst den 2. check überhaupt nicht.

lege es im makescript fest und nicht in den Header Dateien! Wenn jetzt 
im Quellcode jemand verscuht das Define anzulegen oder auf einen anderen 
wert zu setzen bekommt man einen fehler.
#2936193
Lesenswert?

Laber Keks schrieb:
> Hallo,
>
> möchte in meinem Quelltext prüfen, ob F_CPU definiert ist gleichzeitig
> sicherstellen, dass dieser auf die gewünschte Frequenz eingestellt ist.

Es zeigt sich immer öfter, dass dies scheinbare Sicherung ein Boomerang 
ist.

Wenn F_CPU nicht im makefile oder den Project Options definiert ist, 
dann sollte man das tatsächlich als Fehler werten und keinen Default 
machen. Das Nachtragen ist kein Aufwand und es vermeidet 
Fehlersituationen in denen unterschiedliche C-Files unterschiedliche 
Werte für F_CPU benutzen.
Gast #2936202
Lesenswert?

Peter II schrieb:
> du brauchst den 2. check überhaupt nicht.

Ich würde sagen, er braucht den ersten Check nicht (bzw. ist sogar 
kontraproduktiv). Wenn das danach folgende Programm davon abhängt, dass 
32 MHz eingestellt sind, ist der zweite Check schon sinnvoll.

Du musst einfach 32000000UL statt 32e6 schreiben, denn 32e6 ist eine 
Fließkommazahl und kein Integer.

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