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 }
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.