bootloader für ATmega162

Gast #75225
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

}
Gast
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
Gast
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
Gast
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.