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
Wird eine "static" Funktion nur einmal verwendet, neigt GCC dazu sie statt dessen dort wo sie aufgerufen wird direkt einzubauen. Anhilfe: "static" rauswerfen.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.