mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie erzeuge ich ein Listing mit AVR-GCC?


Autor: Christoph Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie erzeuge ich mit avr-gcc (unter Linux) ein Listing, dass aussieht
wie das am Ende des Postings? Ich hab mit avr-objdump schon so ein
ähnliches Listing erzeugt, aber da fehlen die Kommentare, was die
Assemblerbefehle denn jetzt für eine C-Zeile repräsentieren.

MfG
- C. Lechner

---> schnipp! <---

   superFunc();
 148:  0e 94 f6 00   call  0x1ec

  ultraFunc(0x55);
 14c:  85 e5         ldi  r24, 0x55  ; 85
 14e:  0e 94 fb 00   call  0x1f6

  PORTD = gigaFunc();
 152:  0e 94 fd 00   call  0x1fa
 156:  82 bb         out  0x12, r24  ; 18

  PORTA = (addFunc(0xF0, 0x11) & 0xff);
 158:  61 e1         ldi  r22, 0x11  ; 17
 15a:  80 ef         ldi  r24, 0xF0  ; 240
 15c:  0e 94 ff 00   call  0x1fe
 160:  8b bb         out  0x1b, r24  ; 27
  PORTB = (addFunc(0xF0, 0x11) >> 8);
 162:  61 e1         ldi  r22, 0x11  ; 17
 164:  80 ef         ldi  r24, 0xF0  ; 240
 166:  0e 94 fc 00   call  0x1f8
 16a:  89 2f         mov  r24, r25
 16c:  99 27         eor  r25, r25
 16e:  88 bb         out  0x18, r24  ; 24

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal das hier. Das ist über DJGPP (gcc für DOS), sollte aber
eigentlich mit allen gcc Versionen funktionieren (wenn es denn
funktioniert, probiert hab ichs nicht:):

http://www.delorie.com/djgpp/v2faq/faq8_20.html

Autor: Christoph Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das kommt dem, was ich zu erreichen suche schon sehr ähnlich allerdings
hat der Linker da noch nicht zugeschlagen und daher enthalten alle
Adressen immer noch 0x00. Außerdem ist mir aufgefallen, dass manchmal
die Assembler-Befehle vor der C-Zeile im Listing kommen. Ich werd mal
g00gle fragen, jetzt habe ich ja in Form der Argumente, die bei DJGPP
vorkommen, neue Suchwörter.

- C. Lechner

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habs jetzt auch mal probiert, da kommen schon Adressen != 0,
aber selbstverständlich sind das noch nicht die fertig aufgelösten
Adressen, sondern der Programmzähler von gas während er das einzelne
Modul assembliert.

Kann sein dass die Assemblerzeilen und der C Code durcheinandergeworfen
werden, das passiert scheinbar bei gcc, wenn man Debuginformationen und
Optimierungen eingeschaltet hat (viele Compiler lassen es auch gar
nicht erst zu, Code zu optimieren und mit Debuginfos zu versehen).
Falls du -O, -O3 oder ähnlich angegeben hast, kannst du das ja mal
weglassen, aber dann sieht der Code natürlich dann anders aus, was
vermutlich nicht Sinn der Sache ist.

Brauchst auch nicht unbedingt nach DJGPP zu suchen, lies doch einfach
die Dokumentation von gcc und der binutils:

http://www.gnu.org/software/binutils/manual/
http://gcc.gnu.org/onlinedocs/

Ansatzpunkt wären da die Optionen die auf der DJGPP Site angegeben
sind...

Autor: Christoph Lechner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Die -O3, die ich tatsächlich im Makefile hatte, hab ich wieder
rausgemacht, sollte auch nur ein Test sein. In der Entwicklungsphase
tut man ja normalerweise erst dann auf Optimierung gehen, wenn man das
Produkt fehlerfrei hat bzw. glaubt dass es so ist.

Mit den "Adressen" meinte ich die Zieladressen von call, lds etc...
Die Adressen der OP-Codes sind doch AFAIK nur relativ zum Anfang des
Moduls, oder?

Werde mal die Doku zu den binutils, speziell zum "as" lesen, weil der
das Listing ja erzeugt.

THNX
- Christoph Lechner

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit den "Adressen" meinte ich die Zieladressen von call, lds etc...
>Die Adressen der OP-Codes sind doch AFAIK nur relativ zum Anfang des
>Moduls, oder?

Jo, das ist richtig. Hab dich da falsch verstanden mit den Adressen.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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