www.mikrocontroller.net

Forum: Compiler & IDEs Bootloader


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Gruß
Thorsten

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias:

sollte auch nur ein Hinweis gewesen sein.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.