Forum: Compiler & IDEs Ein Neustart aus dem Bootloader


von Günther F. (taraquedo)


Lesenswert?

Hallo!

Mein Bootloader ist eigentlich ein Loader. Mein Hauptprogramm ruft ihn 
bei Bedarf auf und dann lädt dieser die Hauptanwendung neu. Klappt 
super. Nur der anschließende Neustart nicht.
Ich mache das ganz simpel so:
1
wdt_enable(WDTO_1S);
2
while (1);
Er startet neu, aber dann startet die Hauptanwendung in einem Interval 
von deutlich weniger als einer Sekunde ebenfalls immer wieder neu. Bis 
man die Schaltung kalt neustartet. Dann ist alles in Ordnung und die 
Anwendung läuft korrekt an. Dabei rufe ich fast als erstes in der 
Hauptanwendung wdt_disable() auf. Ich dachte mir, dass vielleicht der 
Watchdog noch eingeschaltet sein könnte. Was habe ich übersehen? Oder 
geht das so gar nicht?

In der Hauptanwendung wird der Sprung zum Loader mit
   #define BOOTLOADER 0x7000
   (*((void(*)(void))BOOTLOADER))();
ausgeführt. Was passiert da eigentlich mit dem ganzen Krams, der im RAM 
ist (also auch Stack und so). Da es zwei verschiedene Projekte sind 
werden die Variablen wohl einfach überschrieben, oder? Und was ist mit 
den Interrupts? Im Loader nutze ich keine. Aber in der MainApp.

Viele Grüße!
P.S.: Wenn jemand an dem Bootloader von SD-Karte interessiert ist, dann 
kann ich den auch mal rüberschicken. Ist z.Z. noch nicht elegant 
programmiert, klappt aber.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Er startet neu, aber dann startet die Hauptanwendung in einem
> Interval von deutlich weniger als einer Sekunde ebenfalls immer
> wieder neu.

Dann hast du einen hinreichend neuen AVR mit einem Watchdog, der
offenbar eine erhöhte Sicherheit gegen wildlaufende Programme bieten
soll.  Den musst du wirklich exakt so abschalten, wie es im Datenblatt
beschrieben ist.

Siehe auch die einleitenden Worte (und das Codebeispiel) in:

http://www.nongnu.org/avr-libc/user-manual/group__avr__watchdog.html

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.