Forum: Mikrocontroller und Digitale Elektronik Kleiner Tip zum Simulieren mit AVR-Studio! Ein paar Schritte zurück


von Thomas (kosmos)


Lesenswert?

Hallo, mich hat es immer schon genervt das ich beim Simulieren jedesmal 
bei einem Fehler das Programm von neuem durchsimulieren musste, gerade 
wenn man mit externen Interrupts arbeiten und immer die Pins 
aktivieren/deaktivieren muss um einen Interrupt auszulösen.

Dann habe ich mit Sprungmarken gearbeitet um durchgetestete 
Programmteile zu überspringen oder mit Broakponts um an bestimmten 
Stelle anzuhalten.

Das eigentlich Problem war aber, das man bei einem Fehler, trotzdem 
nochmal das Simulieren neustartet, um wieder an die Fehlerstelle 
zukommen. Hier wäre es nicht schlecht gewesen wenn man einfach mal 
einige Schritte im Programm zurück könnte.

Nun bin ich aber auf die Idee gekommen einfach den Programmcounter zu 
manipulieren. Ich merke mir also den Programmcounter an einer Stelle vor 
dem Fehler und wenn ich am Befehl mit einer unerwünschten Aktion vorbei 
geschlittert bin, setze ich den Programmcounter an die gemerkte Adresse 
und der gelbe Pfeil im Simulator geht wieder ein paar Schritte zurück.

Könnte das per JTAG auch funktionieren, habe JTAG noch nicht ausprobiert 
aber da die Sachen immer umfangreicher werden, wäre es schön das ganze 
in einer richtigen Umgebung testen zu können.

von Michael U. (amiga)


Lesenswert?

Hallo,

und Simulator oder JTAG habe ein so gutes Gedächtnis, daß sie alle 
Registerwerte, I/O-Werte, Speicherwerte an jedem von Dir gewünschten 
PC-Stand mal schnell wieder passend setzen?

Das bezweifle ich mal...
Das müßtest Du dann wohl selbst machen, wenn das Ganze einen Sinn haben 
soll.

So hat es nämlich garkeinen Sinn.

Gruß aus Berlin
Michael

von Sven P. (Gast)


Lesenswert?

Wobei die Idee eigentlich so genial ist, dass man so einen 'Verlauf' 
gleich einbauen müsste, finde ich. Vielleicht auch direkt in GDB oder 
so.

von Michael U. (amiga)


Lesenswert?

Hallo,

Sven P. schrieb:
> Wobei die Idee eigentlich so genial ist, dass man so einen 'Verlauf'
> gleich einbauen müsste, finde ich. Vielleicht auch direkt in GDB oder
> so.

Was letztlich heißen würde, jeden ausgeführten Befehl mit seinen 
Veränderungen ab Register/Ram/IO/Flags zu protokollieren.
Oder eben das Programm jedesmal von vorn laufen zu lassen und nur 
automatisch die vom User gesetzten externen Änderungen abzuarbeiten.

Klappt aber spätestens bei echter Hardware und JTAG nicht mehr.

Gruß aus Berlin
Michael

von Sven P. (Gast)


Lesenswert?

Jo klar, aber aufm PC wär sowas machnmal schon hilfreich, finde ich. Ich 
mein, Speicher hat man im Zweifelsfall genug, selbst wenn mans z.B. nur 
auf C-Ebene protokolliert. Würde grad bei langwierigen Programmen 
helfen, wo man nach dem Neustart z.B. immer wieder dieselben Aktionen 
durcharbeiten müsste (Menüs, Eingaben...). Lässt sich nich immer alles 
automatisiern...

von retreti (Gast)


Lesenswert?

Du kannst auch einfach rechtklick machen und "set next statement" oder 
so anklicken. das geht genausogut ;-)

ja es geht auch mit JTAG, das ist wie im simulator + besser :-D

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.