AVR32 Software Restart

#2426363
Lesenswert?

Ist mir gerade noch eingefallen:
Für den Notfall, dass man, z.B., bei der Auswertung von Daten 
feststellt, dass hier irgendwas nicht stimmen kann, würde ich mal 
probieren (ich weiß nicht, ob das geht), einfach mal ein 
Assemblerschnipsel mit 'jmp 0' reinzubasteln.

Josef D. schrieb:
> Ein Sprung auf den
> Reset-Vektor startet das Programm neu, aber die Hardware ist in keinem
> definierten Zustand.

In den Initalisierungsroutinen müssen dann alle verwendeten Register, 
die normalerweise nach dem Einschalten automatisch mit '0' initialisiert 
werden, 'von Hand' gelöscht werden. Falls sonst noch was ringsrum ist, 
muss man das natürlich auch beachten.
#2426456
Lesenswert?

In den Initalisierungsroutinen müssen ...

So habe ich auch angefangen, als ich noch nicht wusste, wie das mit dem 
Watchdog funktioniert; nichts als Ärger...

Wenn man ein Problem hat, das man nur mit einem jmp 0 (das geht auch mit 
C-Mitteln ohne Assembler) zu lösen können glaubt, kann man auch den 
Watchdog starten:
   wdt_enable(WDTO_500MS);
   while(1);  // warten, bis er beisst
Ich gebe vorher noch eine Fehlermeldung über die ISR-getriebene UART 
aus, deshalb warte ich etwas länger, damit der Puffer noch geleert 
werden kann.

In der Initialisierung darf man dann nur nicht vergessen, als erstes den 
Watcgdog wieder aus zu schalten,
s. 
http://www.rn-wissen.de/index.php/Avr-gcc/Interna#Frühe_Codeausführung_vor_main.28.29

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