Forum: Compiler & IDEs Bootloader


von Markus (Gast)


Lesenswert?

Moin an alle,

ich will für den ATmega16 einen Bootloader programmieren. Dazu muß der
Linker zwei Aufgaben erledigen:

1. Die Startadresse des ersten Befehls muss verschoben werden.
2. Der Linker darf keine Vektor-Tabelle für die Interrupts anlegen

Hat jemand einen Plan, wie man das macht?

Thanx, Markus

von Thorsten (Gast)


Lesenswert?

Hallo,

du weist, das es fertige Bootloader gibt ? Ich selbst benutze Megaload
(www.microsyl.com) mit einem ATMega16, funktioniert prima.

Gruß
Thorsten

von Joerg Wunsch (Gast)


Lesenswert?

Das Verschieben des Textsegmentes ist in der FAQ dokumentiert.

Das komplette Weglassen der Interruptvektortabelle ist derzeit nicht
konfigurierbar, d. h. dafür wäre ein eigenes gcrt0.o file notwendig.
Das ist aber auch gar nicht zwingend erforderlich, sofern man nicht
gerade auch noch die letzten paar Bytes im Bootloader-Bereich des ROMs
unbedingt braucht.  Zum anderen können die neuere ATmegas ja sogar
die Interruptvektoren per fuses auf den Bootloader-Bereich drehen...

von Matthias (Gast)


Lesenswert?

Hi

ich hab meinen Bootloader in ASM geschrieben. Habs im AVRGCC versucht
allerdings kommt man auch da nicht um Inline-ASM rum. Also gleich
richtig ran.

@Thorsten
Nicht jeder kann etwas mit einem Bootloader über RS232 anfangen. Meiner
bekommt das Programm z.B. über den USB. Der nächste wird das Programm
wohl aus einem ser. EEPROM rauslesen.

Matthias

von Joerg Wunsch (Gast)


Lesenswert?

Mit dem aktuellen <avr/boot.h> müßte man einen Bootloader komplett
in C hinbekommen.  OK, vorausgesetzt, man zählt den inline-asm aus
<avr/boot.h> noch als C :-), aber inline asm in Headerfiles ist ja
ohnehin gang und gäbe.

von Thorsten (Gast)


Lesenswert?

@Matthias:

sollte auch nur ein Hinweis gewesen sein.

von Matthias (Gast)


Lesenswert?

Hi

@Jörg

Das bezieht sich aber nicht auf den aktuellen WINAVR sondern auf die
CVS Version oder? In meinem WINAVR kann ich keine boot.h entdecken.

Matthias

von Joerg Wunsch (Gast)


Lesenswert?

Ja, ist im Moment nur im CVS.  Kannste Dir aber locker über das
CVSweb-Interface von savannah.nongnu.org rausziehen, das File ist
»self-contained«, Du kannst das also beliebig in eine ältere
Version nachträglich reinstecken.

Die nächste WinAVR-Version wird es infolge Urlaub von Eric wohl
erst im August geben, so sein Plan.

von Markus (Gast)


Lesenswert?

Mal eine Frage an Matthias,

mit welchem Baustein hast Du denn die USB-Anbindung gemacht? Und wie
steuerst Du den vom PC aus an (Treiber usw.) ?

Markus

von Matthias (Gast)


Lesenswert?

Hi

FT245BM von www.FTDIchip.com
Die lassen sich dann entweder als ganz normale COM-Schnittstelle oder
per DLL ansprechen. Treiber liefert der Chiphersteller kostenlos für
diverse OSs.

Matthias

von Ulrich P. (uprinz)


Lesenswert?

Hmm, dabei fing der Thread so gut an... :)

Ich bin am gleichen Problem, wie Markus. Ich möchte auch einen 
Bootloader nutzen. Dabei geht es grundsätzlich nicht darum welchen und 
fertig oder nicht. Es geht um das zusammenpacken von Applikation und 
Bootloader.

Wenn ich die boot.h einbinde, dann hatte ich erwartet, dass ich ein 
Segment definieren kann, ab dem Bootloader Code steht. Ich hatte auch 
erwartet, dass der Linker den eigentlichen Applikationscode dann bis 
maximal zur Grenze des Bootloaderanfangs erzeugt. Leider bekomme ich das 
nicht hin.

Ausgangspunkt:
Ich habe einen Bootloader, der vom AVR Studio assembliert und an die 
korrekte Adresse geflasht wird. Fein.

Ich habe einen Code in WinAVR, mit AVR-Studio compiliert und geflasht, 
funktioniert auch.

Problem:
Die Applikation wird immer für den kompletten Speicher gelinkt, d.h. das 
letzte Segment liegt immer über dem Bootloader. Rumms!

Wie kann ich dem AVRStudio resp. dem WinAVR klar machen, dass der 
Controller weniger Speicher hat, als er denkt. Oder wie kann ich ein 
Dummy-/Bootloader Segment an die korrekte Adresse der per Fuses 
eingestellten Bootloader-Region definieren, dass der Linker hübsch 
darunter bleibt?
Der erzeugte Hex-File darf ruhig weiter die volle Größe in Anspruch 
nehmen, das Problem werde ich schon lösen, bzw der Bootloader achtet 
darauf, sich nicht selbst zu überschreiben.

Ich habe im boot.h bislang nur alle möglichen Zugriffsfunktionen auf den 
Flash gesehen. Aber wie gesagt keine Optionen ein Bootloader-Segment zu 
definieren.

Mir wurde mal gesagt, dass man den Bootloader im eigentlichen 
Applikations-Code unterbringen soll/muss. Selbst da ist mir nun nicht 
klar, wie ich das tue. Schließlich müsste ich ja dem Compiler/Linker 
irgendwann sagen, dass der folgende Code bitte oben in die BL-Sektion 
geschrieben werden muss. Aber wenn ich das wüßte, dann hätte ich 
vermutlich auch das Problem insgesamt gelöst, da ich dort dann einfach 
einen Dummycode platzieren würde.

Ich bin verwirrt...

Gruß, Ulrich

von Günter R. (galileo14)


Lesenswert?

Ulrich P. wrote:
>
> Problem:
> Die Applikation wird immer für den kompletten Speicher gelinkt, d.h. das
> letzte Segment liegt immer über dem Bootloader. Rumms!

Wieso? Die Applikation beginnt doch bei Adresse 0. Der Bootloader liegt 
(adreßmäßig) hinter der Applikation bzw. besser gesagt "linksbündig" am 
Ende des verfügbaren Flash-Bereichs. Der Bereich zwischen Applikation 
und Bootloader ist frei.


>
> Wie kann ich dem AVRStudio resp. dem WinAVR klar machen, dass der
> Controller weniger Speicher hat, als er denkt. Oder wie kann ich ein

Das brauchst Du doch garnicht. Du mußt bei der 
Applikationsprogrammentwicklung lediglich aufpassen, daß das 
Appl.-Programm nicht so groß wird, daß es den Bootloader-Bereich 
erreicht.


> Mir wurde mal gesagt, dass man den Bootloader im eigentlichen
> Applikations-Code unterbringen soll/muss.

Wie soll das gehen? Der Bootloader ist doch im Prozessor 
festprogrammiert und soll Applikationen nachladen, da kann der 
Bootloader doch kein Teil der Applikation sein.

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.