mikrocontroller.net

Forum: Compiler & IDEs Precompiler rechnen lassen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: D a v i d K. (oekel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur zur Sicherheit:
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

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

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

#if TWI_TWBR > 255
    #error TWBR is 8Bit
#else
    #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)
#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:
Anmerkung: #pragma message: TWI Bit rate Register:((8000000UL/100000L)-16)/2
 #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)

Grüße David

Autor: Yalu X. (yalu) (Moderator)
Datum:

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

#if TWI_TWBR <= 10
    #error TWBR to small
#elif TWI_TWBR == 11
    #pragma message "TWI Bit rate Register: 11"
#elif TWI_TWBR == 12
    #pragma message "TWI Bit rate Register: 12"
...
#elif TWI_TWBR == 254
    #pragma message "TWI Bit rate Register: 254"
#elif TWI_TWBR == 255
    #pragma message "TWI Bit rate Register: 255"
#else
    #error TWBR is 8Bit
#endif

Autor: #define (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, da muss nur noch eine weitere Expansion ins Makro:
http://www.decompile.com/cpp/faq/file_and_line_error_string.htm

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define schrieb:
> Nein, da muss nur noch eine weitere Expansion ins Makro:
> http://www.decompile.com/cpp/faq/file_and_line_error_string.htm

Dort wird überhaupt keine Berechnung durchgeführt. Aber es würde auch 
nichts daran ändern, dass der Präprozessor nun in #if/#elif rechnet.

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.