Hallo gibt es eine Möglichkeit den AVR32 zu rebooten per C-Code? Außer
durch den Watchdog?
Hätte die Funktion aus dem Framework versucht, doch leider fährt das
ding dann nicht mehr hoch!!
void wdt_reset_mcu(void)
Warum nicht mit Watchdog? Mach ich immer so.
Wenn "das Ding" nicht wieder hoch kommt, hast Du vielleicht was falsch
gemacht. Wenn Du den Code zeigst, kann man vielleicht helfen.
Ein kompletter Neustart ist doch eigentlich nur nötig, wenn was richtig
schiefgelaufen ist (µC hängt fest). Ob er (der µC) dann noch den Befehl
zum RESET findet?
Sorry, sehe gerade, dass da AVR32 steht und nicht ATmega32.
Aber da wird das vermutlich auch so sein. Ein Sprung auf den
Reset-Vektor startet das Programm neu, aber die Hardware ist in keinem
definierten Zustand. Damit wird man nicht glücklich.
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.
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