Hallo,
ich schreibe gerade einen Bootloader, welcher Variablen bzw. Daten von
Strukturen des eigentlichen Hauptprogramms patchen können soll. Hierzu
informiert das Hauptprogramm via UART einen beliebigen PC mit einer von
mir geschriebenen Software, wo welche Daten liegen. Anschließend wird in
den Bootloader gewechselt und dort sollen dann die Daten verändert
werden.
Vorbelegte Variablen und Strukturen werden bekanntlich im Flash abgelegt
und beim Start des uC von der avr-libc in den RAM geladen. Gebe ich
lediglich die Adresse der Variable via & zurück habe ich nur die Adresse
im RAM. Ich benötige jedoch die Adresse im Flash.
In der .map-file finde ich diese Offset wie folgt:
.data 0x0000000000800100 0x8a0 load address
0x00000000000030b8
0x0000000000800100 PROVIDE (__data_start,
.)
Jedoch würde ich jetzt gerne diese load address 0x30b8 im Hauptprogramm
bestimmen können. Sei es mit Makros oder Variablen, welche vom
Linkerscript gesetzt werden (ähnlich __data_start).
Hat das schon jemand gemacht bzw. wie könnte ich vorgehen? Ich würde
hier nicht fragen, hätte ich nicht schon eine Lösung gefunden.
Gruß
Sven
... natürlich geht es niemanden etwas an um welche Entwicklungsumgebung und welchen Prozessor es sich handelt. Mittlerweile haben ja alle Leser eine Glaskugel.
Sven schrieb: > Vorbelegte Variablen und Strukturen werden bekanntlich im Flash abgelegt > und beim Start des uC von der avr-libc in den RAM geladen. Gebe ich > lediglich die Adresse der Variable via & zurück habe ich nur die Adresse > im RAM. Ich benötige jedoch die Adresse im Flash.
1 | extern uint8_t __data_start, __data_load_start; |
2 | |
3 | #define DATA_FLASH_ADR(var) ((uint16_t)&(var)-(uint16_t)&__data_start+(uint16_t)&__data_load_start)
|
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.