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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren