Bootloader sofort verlassen; Bei Interrupt in den Bootloader

Gast #2174317
Lesenswert?
• ▲
▼
Moin,

ich habe auf meinem Chip einen eigenen Bootloader und das eigentliche 
Programm. Folgende Situation möchte ich lösen:

Beim Anschalten des ATmegas soll der Bootloader sofort auf die Adresse 
0x00 springen, also das eigentliche Programm und dort soll, wenn über 
Usart etwas empfangen worden ist zum Bootloader gesprungen werden und 
seine eigentliche FUnktion ausgeführt werden.

Reicht es, wenn ich das Fuse so setze, dass nicht mit dem Bootloader 
gestartet wird und wenn dann ein Zeichen empfangen wurde, der nach 
0x1c00 springt?

mfg,
Nils
Gast #2174466
Lesenswert?
• ▲
▼
Nils schrieb:
> Moin,
>
> ich habe auf meinem Chip einen eigenen Bootloader und das eigentliche
> Programm. Folgende Situation möchte ich lösen:
>
> Beim Anschalten des ATmegas soll der Bootloader sofort auf die Adresse
> 0x00 springen, also das eigentliche Programm und dort soll, wenn über
> Usart etwas empfangen worden ist zum Bootloader gesprungen werden und
> seine eigentliche FUnktion ausgeführt werden.
>
> Reicht es, wenn ich das Fuse so setze, dass nicht mit dem Bootloader
> gestartet wird und wenn dann ein Zeichen empfangen wurde, der nach
> 0x1c00 springt?

Nils, das wäre sehr gefährlich. Ich wäre auch überrascht, wenn es ginge.

Was, wenn ein Bootvorgang scheitert - und in der Application Section 
dann Unklares steht?

Die Entwickler von AVR haben sich schon was gedacht.

Deine Anwendung, so wie Du sie hier beschrieben hast, ist auch mit den 
Atmegas erreichbar - Dootloader startet das Application Program. Wenn 
dies einen Boot-Befehl liest, setzt es einen Flag (ich benutze dazu das 
EEPROM) und startet den Prozessor erneut - dann ist der Bootloader 
wieder dran.

Besondere Anlässe erfordern besondere Maßnahmen, ja, aber Deine Aufgabe 
hat nicht erkennen lassen, was denn das Besondere an ihr sein solle.

Ciao
Wolfgang Horn
#2175266
Lesenswert?
• ▲
▼
Nils schrieb:
> Reicht es, wenn ich das Fuse so setze, dass nicht mit dem Bootloader
> gestartet wird und wenn dann ein Zeichen empfangen wurde, der nach
> 0x1c00 springt?
das geht, hat dann aber mit Bootloader im eigentlichen nichts mehr zu 
tun und bringt die von Wolfgang beschiebenen Nachteile.
Was spricht dagegen im Bootloader 2-3s auf ein Token am UART zu warten, 
und dann die App zu starten. Zum Update kannst du aus der App immer noch 
in den Bootloader springen muss auch nicht zwingend an die Adresse des 
Bootvectors sein, so das du sofort mit den Update starten kannst.

Sascha

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.