www.mikrocontroller.net

Forum: Compiler & IDEs .lss Dateien und der C-Code


Autor: Fabian Greif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

warum erzeugt WinAVR in der .lss Datei eigentlich nur zu einigen
Funktionen ASM Code unter den jeweiligen C-Zeilen, in anderen nur ASM
??

Die Main Funktion ist zum Beispiel ein einziger ASM Block:
000000d4 <main>:
  d4:  c7 e5         ldi  r28, 0x57  ; 87
  d6:  d4 e0         ldi  r29, 0x04  ; 4
  d8:  de bf         out  0x3e, r29  ; 62
  da:  cd bf         out  0x3d, r28  ; 61
  dc:  0e 94 47 00   call  0x8e
  e0:  0e 94 c1 00   call  0x182
  e4:  0e 94 8a 04   call  0x914
  e8:  0e 94 10 05   call  0xa20
  ec:  c7 98         cbi  0x18, 7  ; 24
  ....


In der gleichen Datei etwas weiter unten:
00000182 <uart_init>:
{
  unsigned char i;

  /* Baudrate einstellen */
  UBRRH = (uint8_t) (UBRR_BAUD>>8);
 182:  10 bc         out  0x20, r1  ; 32
  UBRRL = (uint8_t) UBRR_BAUD & 0x00FF;
 184:  89 e1         ldi  r24, 0x19  ; 25
 186:  89 b9         out  0x09, r24  ; 9
 ....

Kann ich irgendwo einstellen, dass die Darstellung wie uart_init für
alle Funktionen haben will ?? Ich finde das nämlich immer sehr nützlich
um festzustellen wie Speicheraufwendig eine Funktion später in Assembler
ist.

MfG Fabian

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird eine "static" Funktion nur einmal verwendet, neigt GCC dazu sie
statt dessen dort wo sie aufgerufen wird direkt einzubauen.

Anhilfe: "static" rauswerfen.

Autor: Fabian Greif (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was haben den jetzt static Variablen damit zu tun ?? Im dem Programm aus
dem der obige Assemblerauszug stammt wird werden zwar welche verwendet,
allerdings in nur in einer Interruptroutine.

Allerdings bekomme ich den gleichen Effekt auch, wenn ich ein Projekt
ohne static Variablen compiliere. Für manche Funktionen wird Asm +
C-Kommentare erzeugt, für andere nur Asm...

Grüße
Fabian

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Rede war ja nicht von statischen Variablen, sondern von
Funktionen.

Du solltest bei alldem nicht vergessen, dass das Ganze nicht etwa ein
Listing des Compilers ist, sondern eine Disassemblierung des fertigen
Objektcodes, die zusätzlich gewürzt wird mit den Quellcodezeilen, auf
die die Debug-Information der Objektdatei verweist.  Infolge
verschiedenerlei Optimierungen muss der Compiler natürlich den Code
nicht 1:1 abarbeiten, folglich kann es Quellzeilen geben, die komplett
wegoptimiert werden und gar keinen Code erzeugen, wieder andere finden
sich an verschiedenen Stellen im Objektcode wieder.  Gerade in diesem
Falle dürfte objcopy es ziemlich schwer haben, ein einigermaßen
passendes .lss-File zu erzeugen...

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.