Forum: Mikrocontroller und Digitale Elektronik Frage zum Watchdog


von c-ler (Gast)


Lesenswert?

Hallo,

ich spiele gerade mit dem Watchdog meines mega1284p.
Beim Durchlesen des Wikiartikels ist mir folgender Satz aufgefallen:
1
Außerdem bietet der WD die einzige Möglichkeit einen beabsichtigten System-Reset (ein "richtiger Reset", kein "jmp 0x0000") ohne externe Beschaltung auszulösen

Was ist denn da der Unterschied?
Ok, schon klar. Bei einem "richtigen" Reset geschieht das über den RESET 
Interrupt.
Aber in der Praxis dürfte das (zumindest beim gcc) keinen Unterschied 
machen oder?

Denn ab Adresse 0 beginnt ja der StartUp Code.
Also das Löschen des Rams und Initialisieren des Stacks etc.
Es bleibt also keine Information des vorherigen Betriebs übrig, der uC 
sollte sich verhalten wie nach einem "Kaltstart" richtig?

(Ich bin in der ganzen Assembler Geschichte nicht wirklich bewandert. 
Bin letztens erschrocken dass mein leeres C Projekt bereits über 100 
Byte Flash frisst und wollte mir dann doch mal anschaun, was da genau 
passiert.)

Oder gibts in der Praxis doch noch Unterschiede zwischen jmp 0x0000 und 
dem RESET Interrupt?

Grüße,
der c-ler

von spess53 (Gast)


Lesenswert?

Hi

Bei einem Reset werden die Register auf Defaultwerte zurückgesetzt. Bei 
einem jmp 0x000 nicht.

MfG Spess

von NurEinGast (Gast)


Lesenswert?

Na ja - zumindest alles "Hardware einstellunge" wie Timer, I/O 
Konfiguration etc. bleiben beim Sprung nach 0x0000 so wie sie das 
Program vorher gesetzt hatten.
Und wenn Du noch einen Bootloader verwenden willst, dann wird der Sprung 
nach 0x0000 das Bootload Enable Bit auch nicht berücksichtigen.

von bitte löschen (Gast)


Lesenswert?

Ich habe gerade kein Handbuch für den mega1284 hier, aber beim mega8 
steht unter "System Control and Reset" als erste Zeile:
"During Reset, all I/O Registers are set to their initial values, and 
the program starts execution from the Reset Vector."

von c-ler (Gast)


Lesenswert?

Stimmt, die Hardwareregister gibts ja auch noch, Danke, ganz vergessen!

von tachtach (Gast)


Lesenswert?

soweit ich weiss wird die initialisierung der variablen (im ram) durch 
den startupcode nur gemacht wenn diese wirklich im sourcecode 
initialisiert werden ...

schlechtes beispiel:

uint8_t counter;

gutes beispiel

uint8_t counter = 0;

oder machen da die comiler immer eine initialisierung auf null ?

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.