ATMEGA wer löst Watchdog-Reset aus

Gast #177084
Lesenswert?
• ▲
▼
Hallo zusammen

Preisrätsel:

Eine SW auf einem ATmega..(z.b. 64) läuft so vor sich hin. Plötzlich
kommt ein Watchdog-Reset, erkennbar an dem entsprechenden Bit im
MCUCSR-Register.

We kann man herauskriegen, in welcher Endlosschleife o.ä. sich der
Prozessor befunden hat, als der WD zugeschlagen hat???


Gruß Martin
Gast #177085
Lesenswert?
• ▲
▼
Da es ein Reset ist, nur Du selbst.  Du könntest bestenfalls sehr früh
in der Initialisierung (.init1) noch die alten Stack- und Framepointer
retten und dann anhand des Stackinhaltes gucken, ob Du Dir einen Reim
drauf machen kannst, aber der PC-Stand ist komplett weg nach einem
Reset.
Gast #177086
Lesenswert?
• ▲
▼
d.h.
wenn die CPU bei Adresse 0 loslegt, sind die Stackpointer noch auf dem
zustand, die sie beim Reset hatten?

wenn ja, dann bräuchte ich mich ja nur vor dem C-Startup-Code
einzuklinken?
Gast #177088
Lesenswert?
• ▲
▼
Hmm, nö, laut Doku beginnt der Stackpointer nach einem Reset bei 0,
das geht also wohl doch nicht.

Der Framepointer ist das Y-Register(paar).  Sieh Dir am besten mal im
generierten Assemblercode den Aufbau der Stackframes an.  Letztlich
wird im aktuellen Stackframe auch der letzte Stackpointer mit
hinterlegt, darüber könntest Du das ermitteln (und auch den zuletzt
auf dem Stack hinterlegten Rücksprung-PC).

Setzt natürlich alles voraus, daß es nicht in main() passiert, da
main() keinen kompletten Stackframe anlegt (weil davon ja nie wirlich
zurückgekehrt werden muß).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren