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


von Fabian Greif (Gast)


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

von A.K. (Gast)


Lesenswert?

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

Anhilfe: "static" rauswerfen.

von Fabian Greif (Gast)


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

von Jörg Wunsch (Gast)


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...

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.