Forum: Mikrocontroller und Digitale Elektronik Bootloader Fragen


von Schuhlader (Gast)


Lesenswert?

Hallo,

ich habe noch einige Verständnisfragen über Bootloader speziell im 
AVR-Bereich.

Der Bootloader ist ja ein kleines Programm, das das Hauptprogramm 
startet und noch ein paar andere Aufaben erfüllt. Warum ist es so, dass 
der Bootloader immer am Ende des Flashs gespeichert wird, obwohl er als 
allererstes ausgeführt wird? Warum ist er nicht ganz am Anfang im Flash.

Desweiteren muss man bei vielen AtMegas usw. eine Fuse setzen, damit der 
Bootloader aktiv wird. Warum ist das nötig, und wäre dies auch noch 
nötig wenn der Bootloader nicht am Ende, sondern am Anfang des Flashs 
gespeichet wäre?

Gruß

von Karl M. (Gast)


Lesenswert?

Schuhlader schrieb:
> das Hauptprogramm startet

Nöö, das ist nicht der Sinn und der Zweck dieser Einrichtung.

von Karl M. (Gast)


Lesenswert?

Schuhlader schrieb:
> Desweiteren muss man bei vielen AtMegas usw. eine Fuse setzen, damit der
> Bootloader aktiv wird. Warum ist das nötig?

Bei Allen Atmega und Attiny.
Um bei Start die Interrupttabelle und somit alle Einsprung-Vektoren im 
Programm-Bereich des Bootloaders zu legen.

von Stefan F. (Gast)


Lesenswert?

Der Bootloader ist aus zwei Gründen am Ende des Flash Speichers:

a) Weil am Anfang die Interrupt-Vektor Tabelle des Anwendungsprogrammes 
liegen muss.

b) Damit das Anwendungsprogramm nicht speziell für den Bootloader 
angepasst werden muss.

Die Fuse sagt dem Mikrocontroller, dass er nach einem Reset nicht mit 
dem Anwendungsprogramm an Adresse 0 starten soll, sondern mit dem 
Bootloader, der irgendwo weit hinten liegt.

von qwertzuiopü+ (Gast)


Lesenswert?

Schuhlader schrieb:
> Warum ist er nicht ganz am Anfang im Flash.

Ist er bei den neuen Atmegas/Attinys. Dafür muss man jetzt eine Fuse 
setzen, ab wo die App beginnt, damit die Interrupttabelle richtig 
angesprungen wird.

von c-hater (Gast)


Lesenswert?

Karl M. schrieb:

> Schuhlader schrieb:
>> Desweiteren muss man bei vielen AtMegas usw. eine Fuse setzen, damit der
>> Bootloader aktiv wird. Warum ist das nötig?
>
> Bei Allen Atmega und Attiny.
> Um bei Start die Interrupttabelle und somit alle Einsprung-Vektoren im
> Programm-Bereich des Bootloaders zu legen.

So ein Unsinn.

Der Bootloader muss nur bei den Megas am Ende des Speichers liegen. Der 
Grund dafür ist, dass die Atmegas halt einen speziellen Bootladerbereich 
besitzen, der inbesondere eine ganz wesentliche Eigenschaft hat: NUR 
Code, der hier residiert, KANN überhaupt schreibend auf den Flash 
zugreifen. Das ist der eigentliche Knackpunkt. Die zusätzliche 
Vektortabelle zu Beginn eben dieses Bootladerbereichs ist mehr Folge als 
Ursache diese Sachverhalts.

Bei Tinys sieht das anders aus, die haben keinen Bootladerbereich. Man 
kann das auch so sehen: der gesamte Flash ist Bootloaderbereich, 
jedenfalls wenn das entsprechende Fusebit gesetzt ist. Weil das so ist, 
gibt's hier halt auch keine zweite Vektortabelle.

von Schuhlader (Gast)


Lesenswert?

Danke für die Antworten, jetzt ist es ein bisschen klarer.

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.