Forum: PC Hard- und Software AVR-Studio-Simulator, C-Programm schrittweise ausführen Fehlermeldung "not in scope"


von Christian S. (roehrenvorheizer)


Angehängte Dateien:

Lesenswert?

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
von Christian S. (roehrenvorheizer)


Angehängte Dateien:

Lesenswert?

...Dateianhang vergessen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mit Optimierung übersetzt?

von Christian S. (roehrenvorheizer)


Lesenswert?

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

von Christian S. (roehrenvorheizer)


Lesenswert?

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.

von Christian S. (roehrenvorheizer)


Lesenswert?

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
Noch kein Account? Hier anmelden.