Wenn es nicht allzu viele Bytes sind, es also nicht stört, wenn die
Bytes auch im Nicht-Bootloader-Mode fehlen, so kann man dies durch
Manipulation der Stackposition im makefile erreichen.
Der Trick dabei ist, den Stack ein wenig nach unten zu schieben. Dadurch
bekommst du freien Speicher zwischen der Stackobergrenze und dem
physikalischen Ramende.
Dazu gibt es das Symbol __stack, das man im Standard makefile vom WinAVR
manipulieren kann (letztendlich ist dies eine Linkeroption):
1 | EXTMEMOPTS += -Wl,--defsym=__stack=<neue stackobergrenze in bytes>
|
Um zum beispiel bei einem Atmega324 den Stack um zwei Bytes nach unten
zu verschieben lautet die Option:
1 | EXTMEMOPTS += -Wl,--defsym=__stack=0x8008fd
|
Der so geschaffene Speicher wird von den C-Startuproutinen nicht
gelöscht und eignet sich somit sehr gut dazu um aus einer Applikation
Parameter an den Bootloader zu übergeben.
Das Manipulieren von __stack ist im avr-libc-user-manual im Abschnitt
Memory Areas and Using malloc() beschrieben. Ist also "fast" offiziell
...
Bei mir funktioniert diese Methode. Habe den Stack bei mir aber auch nur
um 2 Bytes verschoben...