Precompiler rechnen lassen

Persönliche Seite #5826667
Lesenswert?

Nur zur Sicherheit:
1
#define STR_HELPER(x) #x
2
#define STR(x) STR_HELPER(x)
3

4
#define TWI_TWBR ((F_CPU/SCL_CLOCK)-16)/2
5

6
#if TWI_TWBR <= 10                      /* must be > 10 for stable operation */
7
    #error TWBR to small
8
#endif
9

10
#if TWI_TWBR > 255
11
    #error TWBR is 8Bit
12
#else
13
    #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)
14
#endif

Wird mir nie ein Rechenergebnis mitteilen, weil der Preprozessor stehts 
Ersetzt und erst zur Laufzeit ein printf(%d, TWI_TWBR) möglich wäre (was 
ich auf einem AVR jedoch nicht gebrauchen kann), richtig?

Ausgabe de Build:
1
Anmerkung: #pragma message: TWI Bit rate Register:((8000000UL/100000L)-16)/2
2
 #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)

Grüße David
Moderator #5826679
Lesenswert?

Der Präprozessopr rechnet nur in #if-/#elif-Abfragen. Folgendes wäre
also möglich:

1
#if TWI_TWBR <= 10
2
    #error TWBR to small
3
#elif TWI_TWBR == 11
4
    #pragma message "TWI Bit rate Register: 11"
5
#elif TWI_TWBR == 12
6
    #pragma message "TWI Bit rate Register: 12"
7
...
8
#elif TWI_TWBR == 254
9
    #pragma message "TWI Bit rate Register: 254"
10
#elif TWI_TWBR == 255
11
    #pragma message "TWI Bit rate Register: 255"
12
#else
13
    #error TWBR is 8Bit
14
#endif
Beitrag #5872663 wurde von einem Moderator gelöscht.

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