Hallo allerseits, kürzlich habe ich das Beispiel aus der FAQ http://www.mikrocontroller.net/articles/FAQ#itoa.28.29_.28utoa.28.29.2C_ltoa.28.29.2C_ultoa.28.29.2C_ftoa.28.29_.29 in eines meiner Übungsprogramme mit Ausgabe aufs LCD eingebaut, um zu sehen, wie sich das vorgegebene Unterprogramm ItoA verhält. Was ich im AVR-Studio-Simulator beobachten wollte, war das Füllen der String-Arrays und den character-Pointer. Leider jedoch zeigt mir der Simulator keine der Variablen an, nicht einmal gewöhnliche Laufvariablen. Es erscheinen immer Fehlermeldungen wie im Bildschirmfoto abgebildet "not in scope" oder "location not valid". Die Simulator-Hilfe brachte mich auch nicht weiter. Links unten im Foto im Fenster Data/Memory2 erscheinen irgendwann die zugewiesenen Zeichen 2 7 g. Immerhin. Aber sie erschienen nicht nach jeder Zeile, in der eine Zuweisung erfolgt, wie ich das erwarten würde. Nach einem ganzen Programmdurchlauf erscheinen die Werte dann ebenfals im Watch-Window (rechts im Bild, Array "t"). Sie erscheinen direkt in den Prozessor-Registern R11, R12, R13. Im Fenster "disassembler" sieht man, wie die einzelnen Schritte in ASM-Befehlen ausgeführt werden. In C werden öfter mal mehrere C-Zeilen gleichzeitig ausgeführt zwischen zwei Haltepunkten. Ich betätige die Tasten F10 und F11. Von vor einigen Jahren als ich nur in ASM programmiert habe, bin ich mit dem Simulator recht gut zurecht gekommen, da ich alle Programme durch Probieren und Simulieren zustande bekommen habe. Nur mit diesem oben beschrieben Verhalten kann ich dem Simulator leider keinerlei Nutzen abgewinnen und benutze ihn für C immer weniger gern. Kenn mir da vielleicht jemand mit Tipps weiter helfen? AVR Studio 4.18.684 GUI Version 4, 18, 0, 670 AVR Simulator 1, 0, 2, 1 WinAVR - 20100110 mit freundlichem Gruß Roehrenvorheizer
:
Verschoben durch Moderator
...Dateianhang vergessen...
Mit Optimierung übersetzt?
Ja, mit -Os. Siehe build-Fenster: avr-gcc -mmcu=at90s2313 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT LCD-Routines.o -MF dep/LCD-Routines.o.d -c ../LCD-Routines.c avr-gcc -mmcu=at90s2313 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT itoa_simulation_1.o -MF dep/itoa_simulation_1.o.d -c ../itoa_simulation_1.c avr-gcc -mmcu=at90s2313 -Wl,-Map=ITOA_1.map LCD-Routines.o itoa_simulation_1.o -o ITOA_1.elf ...
Mit -O1 verhält es sich nicht anders. Allerdings mit -O0, also ganz ohne Optimierung beträgt die Größe des Programmcodes 380% der Flash-Größe und der Simulator meldet einen Fehler beim Laden der *.elf -Datei.
Hallo nochmals, beim Nachlesen bin ich noch auf einige interessante Stellen gestoßen, die mich aber nicht weiter bringen: ________ Special considerations Local variables must always be qualified with the function name. This is also the case if the user wants to add a variable from the function that the program has stopped in. False hits on data breakpoints on local variables can be caused by reuse of registers. Depending of the level of optimalization, the compiler might try to reuse a register for several variables. ... The data breakpoint implementation in the simulator and the ICE50 can in some cases fail to detect access to a location referenced by a pointer when msb access type is selected. The problem exists when the pointer is stored in X or Z, and ST/LD X/Y with increment is used to de-reference the pointer. ________ ..... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Exkurs_Makefiles#Debug-Format Beim Simulieren scheinen oft "Variablen zu fehlen". Ursache dafür ist, dass der Compiler diese "Variablen" direkt Registern zuweist. Dies kann vermieden werden, indem die Optimierung abgeschaltet wird (im makefile). Man simuliert dann jedoch ein vom optimierten Code stark abweichendes Programm. Das Abschalten der Optimierung wird nicht empfohlen. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung ... -O0 Keine Optimierung des erzeugten Codes. Diese Optimierungsstufe optimiert den Resourcenverbrauch des Hostrechners und die Nachvollziehbarkeit der erzeugten Codes anhand von Debug-Information. Alle lokalen Variablen werden auf dem Stack angelegt und nicht in Registern gehalten. Es werden keine komplexen Optimierungsalgorithmen angewandt; lediglich Konstanten wie 1+2 werden zu 3 gefaltet. -O1 Je höher die Optimierungsstufe, desto schwieriger ist der erzeugte Code nachvollziehbar — auch mit Debugger. ... _ hier hatten diverse Vorgänger ebenfalls Ungereimtheiten in der Benutzung des Simulators entdeckt: C-Code mit AVR-Studio-Simulator debuggen möglich? Beitrag "C-Code mit AVR-Studio-Simulator debuggen möglich?" mfG
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.