Forum: Compiler & IDEs Präprozessorlisting ausgeben ?


von Karlheinz D. (kdruschel)


Lesenswert?

Hi Leuts,

ich möchte mir der wohl recht bekannten UART-Lib von P. Fleury arbeiten.
Ich setzte hier auf AVR-Studio und gcc.
Nun habe ich einen ATMega128, der auch in den Eigenschaften des 
Projektes richtig definiert ist.
Über #include <avr/io.h> habe ich die prozessorspezifischen Definitionen 
eingebunden.

Nun habe ich in der Datei uart.h folgenden Fehler:
#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )
#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than 
size of SRAM"
#endif

Da UART_RX_BUFFER_SIZE und UART_TX_BUFFER_SIZE jeweils mit 32 definiert 
sind, kann der Fehler eigentlich nur bei RAMEND liegen. Das wiederum ist 
aber als 0x10FF vorgegeben.

Um dem Fehler auf die Spur zu kommen, suche ich nach einer Möglichgkeit 
das Präprozessorlisting anzuschauen. Geht sowas beim AVR-Studio mit gcc 
?

Greets
Karlheinz

von Bernhard R. (barnyhh)


Lesenswert?

Das gibt es beim gcc, wahrscheinlich sogar auf 2 Arten: einmal nach 
stdout bzw stderr und einmal in eine Textdatei. Schau mal in die 
gcc-Dokumentation. Eine weitere Möglichkeit besteht darin, per 
Hilfe-Option die Liste der zulässigen gcc-Optionen auszugeben. Nach 
meiner vagen Erinnerung könnte es mit der Option "-E" oder "-I" zu tun 
haben.

Viel Erfolg
Bernhard

von sous (Gast)


Lesenswert?

'-E' läßt nur den Preprocessor laufen und gibt das Ergebnis auf der 
Konsole  aus. Möchte man dies in ein File umlenken, so kann man noch 
'>filename'angeben.
Also:
avr-gcc source.c -E >filename

Ach ja: Die -mmcu=Controllertyp sollte man auch angeben, da sonst 
gewisse Includings nicht korrekt preprozessiert werden.   ;)

von sous (Gast)


Lesenswert?

...nachdem ich die Frage nochmal genau gelesen habe ('...in 
AVR-STudio...'):

Wenn Du den Compiler nicht von der Konsole aus starten möchtest, kannst 
Du das auch aus dem AVR-Studio heraus machen. Dazu bitte folgendes tun:

Im Menü 'Projekt/Coniguration Options' anwählen,
in dem sich öffnenden Fenster 'Custom Options' wählen,
dort kannst Du Compiler-Direktiven hinzufügen.
Da fügst Du dann '-E' ein (in untere Zeile eintragen und mit 'Add' 
abschliessen).

Wenn Du jetzt den Buildvorgang anstößt, dann erscheint das Ergebnis 
unten im Ausgabefenster 'Build'.

Auch hier kannst Du die Ausgabe in ein File umlenken, dann mußt Du 
ausser '-E' noch '>file.c' als weitere Custom Option hinzufügen. (Die 
Extension .c empfielt sich, dann hast Du das passende 
Syntax-Highlighting, wenn Du das Ergebnis im AVR-Studio anschaust.)

Das Ergebnis file.c sollte dann im Zielordner (in meinem Falle 
'default') zu finden sein.


Und nicht vergessen, die Optionen wieder herauszunehmen, bevor Du dann 
normal weiterarbeiten möchtest... ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karlheinz Druschel wrote:

> #if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )

Die 0x60 ist eine unsinnige Hausnummer.  Die stimmt nur für ganz
alte AVRs.

von Karlheinz D. (kdruschel)


Lesenswert?

1000Dank, mit der -E Option habe ich den (idiotischen) Fehler gefunden

Greets
Karlheinz

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karlheinz Druschel wrote:

> Um dem Fehler auf die Spur zu kommen, suche ich nach einer Möglichgkeit
> das Präprozessorlisting anzuschauen. Geht sowas beim AVR-Studio mit gcc
> ?
>
> Greets
> Karlheinz

Mit der gcc-Option -save-temps werden Zwischendateien nicht temporär 
angelegt und bleiben im aktuellen Verzeichnis, von dem aus gcc gerufen 
wird.

Rein Precompilieren geht mit -E

Defines anzeigen geht mit
1
avr-gcc -E -dM <datei>

von Rolf Magnus (Gast)


Lesenswert?

> '-E' läßt nur den Preprocessor laufen und gibt das Ergebnis auf der
> Konsole  aus. Möchte man dies in ein File umlenken, so kann man
> noch '>filename'angeben.

Oder halt '-o filename'

Am einfachsten ist es, wenn man direkt die gcc-Kommandozeile kopiert, 
die make beim Bauen anzeigt und da dann noch ein -E reinmacht und bei -o 
den gewünschten Dateien einsetzt. Dann hat man alle Einstellungen genau 
so wie beim Bauen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.