Hallo,
ich nutze WINAVR zusammen mit der aktuellen Version des AVR Studios.
(hab bisher ausschließlich in Assembler prog.)
Um zu sehen, was der Compiler so treibt, wollte ich mir das Listfile mit
den Assembler-Befehlen ansehen.
Über den Umweg Hexfile -> disassemblieren funktionierts.
Obwohl "Listfile Create" in der Optionen angekreuzt ist, erzeugt er
keins
(müsste ja unter Order "Others" erscheinen.
Hab ich da noch einen Denkfehler, und "Create List " bedeutet überhaupt
nicht, dass er ein File mit den Assemblerbefehlen erzeugt oder müssen
noch andere Optionen eingestellt werden?
Eine kleine Frage noch:
Habe mal mit was ganz einfachem begonnen: LED an Portpin einschalten
In Assembler ein Zweizeiler. Im AVR GCC nach Compilieren an die 100
Byte.
Entsetzen nach Ansicht des Assembler-Files, was da an Bytes völlig
sinnloserweise zwischen SRAM, Registern und Stack hin- und
hergeschaufelt wird. Optimierung ist eingeschalten, müssten da die
ganzen sinnlosen loads und stores nicht rausfallen?
Bedeutet das im Umkehrschluss, dass man die ganzen Tiny-AVRs mit wenig
Programmspeicher mit C praktisch nicht bearbeiten kann, da schon bei
kleineren Programmen der Flash voll ist?
Welche Erfahrungen habt ihr damit?
Das listfile findest du da, wo auch das Hexfile liegt (bei der
default-Konfiguration im Ordner "default"). Normalerweise reicht dazu
das Häckchen bei "Create Listfile".
Oliver
André hat schon recht: Wenn die Option "Generate List File" ausgewählt
ist, müsste die .lss-Datei im Project Tree unter "Other Files"
erscheinen (zumindest tut sie das bei mir immer...).
Der Overhead bei C Programmen ist eigentlich nur bei kleinen Projekten
lästig. Bei grösseren Projekten, die du nicht mehr in Assembler machen
willst, nimmst du den halt in Kauf.
André wrote:
> Hallo,>> Eine kleine Frage noch:> Habe mal mit was ganz einfachem begonnen: LED an Portpin einschalten> In Assembler ein Zweizeiler. Im AVR GCC nach Compilieren an die 100> Byte.> Entsetzen nach Ansicht des Assembler-Files, was da an Bytes völlig> sinnloserweise zwischen SRAM, Registern und Stack hin- und> hergeschaufelt wird. Optimierung ist eingeschalten, müssten da die> ganzen sinnlosen loads und stores nicht rausfallen?
Was du siehst, ist die Startup Sequenz eines C-Programmes.
Da muss schon ein bischen was hergerichtet werden.
Für dein konkretes Beispiel ist das zugegebenermassen sinnlos,
aber im allgemeinen Fall ist ein Programm ja ein bischen
komplexer als einfach nur eine LED einschalten. Von den 100
Bytes sind 90 oder 95 Bytes als konstant anzusehen. D.h. die
werden nicht mehr, wenn dein Programm größer wird.
Ich hab mich vor ein paar Wochen mal auf WinAVR eingelassen, man wird ja
älter ;-)
Und ich muss sagen, ich war sehr positiv überrascht. Installation
problemlos, Hello World (blinkende LED) war auch ohne Krampf fix auf dem
AVR. Und der erzeugte Asemblercode ist, soweit ich das bisher
gesehen/überflogen habe, recht kompakt, da kann nur an wenigen Stellen
noch grossartig optimiert werden.
Ich hab zu Übungszwecken mal ein grösseres Program von ASM in C
konvertiert. In ASM waren es ca. 7 KB (incl. 700 Byte Textkonstanten,
115kB Quelltext). In C ist es ca. 9kB (56kB Quelltext), naja, leicht
verrissen, es passt nicht mehr in den 8515, aber dennoch ist der
Overhead zum ASM recht gering. Nur dass die C Version WESENTLICH
einfacher/angenehmer zu lesen ist (nein, auch die Assemblerversion ist
schon ganz brauchbar strukturiert, aber ASM ist nunmal ASM).
MFG
Falk
Das List-File ist weder im Default_Ordner noch direkt im Projekt-Baum,
wird scheinbar nicht generiert, obwohl "Create.." angewählt.
Das map-File erscheint im Other Files Ordner.
Hmmm, Ratlosigkeit...
@Karl Heinz:
Dachte ich mir schon fast, nahm aber an, dass die Optimierung das
"wegoptimiert", hatte mich deshalb etwas gewundert.
Ich glaube, wenn man was in C macht, darf man sich über bestimmte Dinge
am Anfang nicht so Gedanken machen.
@André
>Das List-File ist weder im Default_Ordner noch direkt im Projekt-Baum,>wird scheinbar nicht generiert, obwohl "Create.." angewählt.>Das map-File erscheint im Other Files Ordner.>Hmmm, Ratlosigkeit...
Hast du im normalen Datei-Explorer nachgeschaut oder im AVR-Studio?
Schau auf deiner Festplatte nach.
>Ich glaube, wenn man was in C macht, darf man sich über bestimmte Dinge>am Anfang nicht so Gedanken machen.
Ohhhh, wenn das mal kein Irrtum ist.
MfG
Falk
@Falk
hab auch schon direkt im Datei-Explorer gesucht. Da gibts außer .map
.hex nur noch ´ne Datei .ELF, da steht aber auch nichts drin, was
irgendwie nach Assembler-Befehl aussieht.
Die Datei hat eine Endung .LSS
und bei mir wird die schon im Default Ordner erzeugt.
Bin jetzt ehrlich etwas ratlos. Hatt noch nie Probleme
damit: Generate List File angekreuzt, copmiliert und
das File aufgemacht.
Danke an Alle für die Tipps.
Ich weiss zumindest, dass es so funktionieren sollte.
Werd erstmal ein neus Projekt erstellen, u.s.w und wer weiss, vllt.
klappts dann.
Mach auf jeden Fall einen grossen Bogen um Pfadnamen
die Leerzeichen und/oder Sonderzeichen enthalten.
Viele seltsame Fehler gehen auf das Konto von
c:\Dokumente und Einstellungen