Präprozessor #define Vergleich

OP #1546704
Lesenswert?

Hi!

Ich will den Präprozessor einen Wert überprüfen lassen ... leider klappt 
das irgendwie nicht.

1
#define FREQ 2000.0 // CLK frequency for LCD
2
#define OCRVAL (unsigned char)((double)F_CPU/(16.0*FREQ)+1)
3
#if (OCRVAL > 255)
4
#error "The OCR0 value is too large. Increase the prescaler."
5
#endif

Obiges erzeugt folgende unsinnige Fehlermeldung:

"error: missing binary operator before token "char""

Wenn ich im "#if" OCRVAL durch eine Zahl ersetze meckert der Compiler 
nicht mehr. Gibt es eine Möglichkeit per #if einen vom Präprozessor 
berechneten Wert zu vergleichen?
Gast #1546728
Lesenswert?

Marko B. schrieb:
> Obiges erzeugt folgende unsinnige Fehlermeldung:

Das ist ein Irrtum Deinerseits. Die Meldung ist nicht unsinnig. Du 
verstehst sie nur nicht.

Marko B. schrieb:
> Gibt es eine Möglichkeit per #if einen vom Präprozessor
> berechneten Wert zu vergleichen?

Ja.
Gast #1546766
Lesenswert?

Du hast gleich mehrere Fehler drin:

> #define FREQ 2000.0 // CLK frequency for LCD
                    ^
                    mag der Präprozessor nicht (ohne weiteres) zum
                    rechnen

> #define OCRVAL (unsigned char)((double)F_CPU/(16.0*FREQ)+1)
                  ^        ^      ^
                  damit kann der Präprozessor nix anfangen - also
                  ungut für #if und co.

> #if (OCRVAL > 255)
              ^
              einen unsigned char auf '> 255' zu überprüfen ist
              reichlich.. ähm.. ungünstig

Hier mal ein Beispiel, wies 'richtig' ist (respektive funktioniert):
1
#define F_CPU 8000000UL
2

3
#define FREQ 2000 // CLK frequency for LCD
4
#define OCRVAL (F_CPU /(16 *FREQ) +1)
5
#if (OCRVAL > 255)
6
#error "The OCRVAL value is too large. Increase the prescaler."
7
#endif

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