Hallo,
ich programmiere gerade einen Bootloader für einen ATmega128 und
verwende zusätzlich ein Statusbyte, das im Flash abgespeichert wird.
Dieses soll wenn möglich an letzter Stelle im Flash - beim mega128 also
an 0x1FFFF - stehen.
Doch wie kann ich das dem GCC sagen?
Wenn ich
1 | uint8_t PROGMEM status = 0x10;
|
schreibe, dann weiß ich ja nicht exakt wo das Byte abgelegt wird. Da ich
dieses Byte wieder verändern muss (nach jedem neuem Flashen der
Hauptapplikation), weiß ich jetzt nicht welche Page in der
Bootloadersection selbst ich neu beschreiben muss. Bei der letzten
Adresse im Flash hab ich das Problem nicht, da lies ich einfach immer
die letzte Page aus, verändere mein Statusbyte und schreibe die Page
neu.
In Assembler würde ich das Statusbyte einfach so ablegen:
1 | .org FLASHSIZE/2
|
2 | status: .db 0x10
|
Geht das auch irgendwie in C? Was passiert wenn ich das so in Inline
Assembler hinschreibe?
Was allgemeines: in der pgmspace.h wird empfohlen, Daten im Flash
generell in unteren 64k abzulegen. Kann mir jemand sagen warum? Ich kann
es ja nicht beeinflussen, wenn ich
uint8_t PROGMEM status = 0x10;
schreibe, wo der GCC dieses Byte ablegt oder?
mfg Stefan