Ein Neustart aus dem Bootloader

OP #562073
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.
Moderator Persönliche Seite #562082
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.