Guten Tag,
zur Zeit schreibe ich einen Bootloader für einen ATMega128. Dieser soll
später auch in verschiedenen Projekten eingesetzt werden können. Nun
habe ich für den Bootloader die ".bootloader" section im Flash des
ATMega ausgewiesen und allen im Bootloader verwendeten Funktionen diese
als entsprechendes Attribut zugewiesen. Ein Beispiel hierzu:
1 | void btl_main(void) BOOTLOADER_SECTION;
|
wobei in der avr/boot.h die Definition zu finden ist:
1 | BOOTLOADER_SECTION __attribute__((section (".bootloader"))
|
Nun verwende ich im Bootloader einige #defines, z.B. eines das für einen
Stringvergleich mit dem Ende eines HEX-Files benötigt wird:
1 | #define HEXFILE_ENDOFILE ":00000001FF"
|
1 | #define HEXFILE_SIZE_ENDOFILE 12
|
In einer Bootloader-Funktion möchte ich nun diese Definition verwenden
und benutze hierzu folgende Zeile:
1 | char endOfFileString[HEXFILE_SIZE_ENDOFILE] = {HEXFILE_ENDOFILE};
|
Als Test habe ich dann den String HEXFILE_ENDOFILE geändert (z.B. in
":12340001FE"). Nach einem Buildvorgang habe ich das ursprüngliche und
das zu Testzwecken erstellte HEX-File miteinander verglichen und konnte
feststellen, dass nicht etwa eine Änderung in der Boot-Section erfolgte,
sondern in der Application-Section. Mir scheint, als sei dieser String
als eine Konstante im Application-Flash abgelegt worden
Zum Hintergrund meines Tests:
Natürlich macht es für mich momentan keinen Sinn, das standartisierte
Endzeichen eines HEX-Files anzupassen. Dennoch könnten ähnliche
Änderungen im Bootloader irgendwann möglich sein. In der jetzigen
Konfiguration würde der Bootloader beim Flashen ja einen Teil seines
eigenen Speichers (der im Application-Flash steht) löschen.
Ich würde mich freuen, wenn ihr mir auf diesen Sachverhalt eine Antwort
hättet.
P.S.: Im Anhang befindet sich ein Screenshot von den beiden HEX-Files.
Links steht das ursprünlgiche HEX-File, rechts das vom Test. Der
Bootloader Bereich startet bei Adresse E000 (WORD Adresse).