www.mikrocontroller.net

Forum: Compiler & IDEs Ein Neustart aus dem Bootloader


Autor: Günther Frings (taraquedo)
Datum:

Bewertung
0 lesenswert
nicht 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:
wdt_enable(WDTO_1S);
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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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__...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.