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