Hallo Und Servus ! Nutze das AVR-Studio 4.13 und möchte nun den C-Code simulieren und mir dabei meine Variablen beobachten. Ich weiß, es gibt schon einige Beiträge dazu mit Einträgen im makefile. Bekomme das aber nicht gebacken. Wie mache ich das Schritt für Schritt. Habe schon mit dwarf-2 und extcoff rumprobiert, bekomme aber keine Variablen zu sehen. Wenn ich im AVR-Studio mit "Build all" und dann mit PonyProg flashe, funktioniert auch meine Steuerung, brauchte also noch nie was mit den ominösen makefiles machen. Wer kann helfen ? Gruß Reschi
Du musst dich um das Makefile überhaupt nicht kümmern. Das erledigt AVR-Studio für dich. Blöd ist nur, dass du jetzt anscheinend schon rumgespielt hast. So wie AVR-Studio ein neues Projekt aus dem Stand heraus anlegt, so funktioniert das auch. Anyway: Geh auf den Menüpunkt 'Project'. Ganz unten sind die Project Options. Da geht ein Dialog auf. In dem stellst du sicher, dass bei Optimierung -O0 eingestellt ist. Damit schaltest du die Optimierung aus, sonst kommts zu seltsamen Effekten im Debugger, weil der Optimizer den Code komplett umkrempeln kann und wird. Dein Programm wird gestartet, indem du im Menü 'Debug' den Punkt Start auswählst. Mit F10 bzw. F11 (dazu gibts auch entsprechende Menüpunkte in 'Debug') kannst du dein Programm einen Schritt machen lassen. Und ja, man kann sich selbstverständlich die Variablen anzeigen lassen.
Karl heinz Buchegger wrote: > Damit schaltest du die Optimierung aus, sonst > kommts zu seltsamen Effekten im Debugger, weil der Optimizer den Code > komplett umkrempeln kann und wird. Einziger Nachteil dieser Lösung: du debuggst zweimal. Das erste Mal so, wie von Karl Heinz beschrieben. Beim zweiten Mal debuggst du dann die Gemeinheiten (wie vergessene "volatile"s), die du erst mit dem Optimizer siehst. Wohl oder übel musst du dich für den zweiten Debuggerlauf dann durchbeißen, dass der Compiler da manches umgebaut hat: bestimmte Variablen benötigst du für dein Verständnis und den besseren Überblick, der Compiler benötigt sie aber nicht, sondern rechnet vielleicht gleich drei Schritte weiter (die sogenannte "common subexpression elimination") und speichert das Zwischenergebnis in Registern. Das ist nicht immer einfach zu verfolgen, aber man gewöhnt sich dran. Der AVR-Studio-Debugger ist in dieser Hinsicht allerdings kein gutes Werkzeug, da er dir nicht die Eingabe beliebiger C-Ausdrücke zur Bewertung gestattet. Was zum Beispiel ganz häufig passiert, ist sowas:
1 | void myfunc(void *p) |
2 | {
|
3 | struct something *sp = (struct something *)p; |
4 | |
5 | ...
|
6 | sp->ele1 = 42; |
7 | ...
|
8 | }
|
In diesem Falle besitzt der Compiler den Hilfskonstrukt "sp" nicht mehr, da du den nur als Programmierer für den strukturierten Zugriff benötigst, der Compiler sich aber gleich daraus die entsprechenden Offsets zu Adressen umrechnet. Folglich gibt's im optimierten Code kein "sp" mehr, und AVR Studio hat nichts, was es dir im Watch-Fenster anzeigen kann. Du musst dann umständlich den Wert von "p" benutzen (den sollte auch AVR Studio kennen, der würde im genannten Fall in den Registern r24/r25 stehen) und über eine Speicheransicht deine Struktur angucken. Andere Debugger gestatten beliebige C-Ausdrücke. In einem GDB kann man daher sich den Hilfkonstrukt rein für den Debugger wieder herstellen und schreiben:
1 | (gdb) print *(struct something *)p |
Man könnte sogar eine Debugger-Hilfsvariable einführen:
1 | (gdb) set $sp = (struct something *)p |
2 | (gdb) print *$sp |
Dank an die Moderatoren! So weit alles begriffen und im Menüpunk mit der Optimierung ist auch alles o.k. . . . Mit F10 bzw. F11 (dazu gibts auch entsprechende Menüpunkte in 'Debug') kannst du dein Programm einen Schritt machen lassen. Und ja, man kann sich selbstverständlich die Variablen anzeigen lassen. . . . !!! Genau bis hierher bin ich. Außer die Register, IO-Ports, Laufzeit usw. sehe ich aber nichts. Hab schon mit "Watch" Versuche gemacht...Meldung 'not in scope'.... Habe z.B. eine Variable 'unsigned int Test=20' erstellt und mein Programm bearbeitet dann diese Variable, wie kann ich d a s (z.B. mit F11 schrittweise) beobachten ?? Gruß Reschi
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.