mikrocontroller.net

Forum: Compiler & IDEs bootloader für ATmega162


Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

ich versuche mich gerade damit, einen Bootloader zu schreiben.

Die Routine "bootloader()" soll in der Bootloader-Section landen,
damit nach reset dorthin gesprungen wird, wenn die Fuse gesetzt ist.

Dazu muss ich dem Linker doch sicher noch eine Adresse angeben, aber
wie??
Ist das überhaupt so richtig, wie ich es versuche?

Gruß Martin


Das untenstehende habe ich mal probehalber compiliert, die Routine
liegt aber anschliessend im Normalen Speicher



#include <avr/io.h>
#include <avr/ina90.h>
#include <avr/interrupt.h>
#include <avr/boot.h>
#include <avr/signal.h>


BOOTLOADER_SECTION


void bootloader( void );

void bootloader( void )
{
::::
hier soll mal code hinein, um
 - das Flash zu löschen
 - neu zu beschreiben
 - anschliessend nach RESET zu Springen

}

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Du must im Makeile angeben, wo Dein Code landen soll. Und zwar bei den
Linker-Flags. Bei mir (WinAVR) sieht das dann so aus:

LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -Ttext=0x1F000

-Ttext gibt dann an, an welcher Adresse der Code starten soll.

Gruß, Georg

Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke georg, das werde ich mal versuchen.


Gruß Maartin

Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Georg
Es funktoniert!

Aber wie schaffe ich es denn, dass bei einem Programm, welches aus
einem "Hauptteil" und einem "Loaderteil" besteht, dass der
Hauptteil bei 0x0000 und der Loaderteil z.b. bei 0x1F80 anfängt??

mit der -Ttext -angabe verschiebe ich ja immer nur einen
zusammenhängenden block??!!


Gruß martin

Autor: Shane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
würde mich auch interessieren wie man das hinbekommt


habe schon

avr-objcopy [...]  --change-section-address .bootloader=0x1234  [...]

probiert, aber funktioniert leider nicht wie gewünscht

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das steht in der AVRlibc beschrieben wie sowas geht.
http://www.nongnu.org/avr-libc/user-manual/index.html

Es wird aber nicht funktionieren wenn du beim Reset direkt in die
Bootloader-Section springst da der komplette Startup-Code nicht dort
liegt. Ich löse das so das der Bootloader eine extra Anwendung ist die
ich per Linkerkommando an die Bootloaderadresse verschiebe. Für den
Release bau ich mir dann mittels Shellscript aus Applikation und
Bootloader eine gemeinsames HEX-file.

Matthias

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.