Forum: Mikrocontroller und Digitale Elektronik Bootloader sofort verlassen; Bei Interrupt in den Bootloader


von Nils (Gast)


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

von Wolfgang Horn (Gast)


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

von Sascha W. (sascha-w)


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

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.