RESET: Watchdog vs ASM ijmp

OP #2390064
Lesenswert?

Hallo!

Mit Assembler kenne ich mich nicht gut aus. Das macro habe ich in einem 
C-Code gefunden. Es dient zum Reset bei z.B. Timeouts o.ä.

Gerne würde ich den Unterschied zwischen einem "echten" Reset(wie z.B. 
durch den Watchdog hervorgerufen) und folgendem macro erfahren:

#define RESET() {asm("ldi r30,0"); asm("ldi r31,0"); asm("ijmp");}


Werden Speicherinhalte genauso behandelt, wie bei einem WDT-RST?


Danke für Erklärungen!
OP #2390130
Lesenswert?

Wenn die Inhalte im Ram erhalten bleiben, so werden sie jedoch im code 
bei eienr Definition/Deklaration einer Variable:

char abc = 0; wieder befüllt.


Wenn ich also einen RX-Buffer z.B. von der UART habe:


char uart_rx_buf[MAX_BUF];

dann bleibt der Buffer nach dem Reset per: ijmp befüllt?!?
#2390151
Lesenswert?

Timo P. schrieb:
> dann bleibt der Buffer nach dem Reset per: ijmp befüllt?!?

Nein, denn alle nicht explizit initialisierten statischen Variablen 
werden implizit mit Null initialisiert. Wenn du das nicht willst, musst 
du sie in die .noinit Section packen.

Außerdem: in Bezug auf den RAM-Inhalt gibt es gar keinen Unterschied 
zwischen echtem Reset und Softare-Reset (Sprung nach 0).

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