Hallo, ich lege die neue Firmware Daten im Flash ab Adresse 0x0800 8000 ab. Das Beschreiben und Lesen vom Flash funktioniert soweit. Nun soll die aktuell laufende Firmware duch die neue Firmware ersetzt und der Controller neu gestartet werden (mit einer Update Funktion). Kann man eigentlich im Linkerskriptfile einen festen Speicherbereich nur für die Update Funktion festelegen ? Wenn ja, dann könnte man im Hauptprogramm auf diese Funktion einen Funktionspointer setzen und diese Funktion wird dann nicht von der aktuelle laufenden Firmware ausgeführt, sondern von der aktuellen Firmware.
Entwickler schrieb: > Kann man eigentlich im Linkerskriptfile einen festen Speicherbereich nur > für die Update Funktion festelegen ? Ja. > Wenn ja, dann könnte man im Hauptprogramm auf diese Funktion einen > Funktionspointer setzen und Ja. > diese Funktion wird dann nicht von > der aktuelle laufenden Firmware ausgeführt, sondern von > der aktuellen Firmware. Wann soll die Funktion ausgeführt werden? Grüße Sven
Guten Morgen Sven, im Hauptprogramm setzte ich dann den Funktionspointer auf die Adresse, wo sich diese Funktion (neuen Firmware) befindet. Diese Funktion befindet sich in der laufenden Firmware sowie in der neuen Firmware. Wie kann im Linkerskriptfile einen festen Speicherbereich nur für die Update Funktion festelegen ? Beim Infineon Mikrocontroller konnte man dies so lösen:
1 | CLASSES
|
2 | (
|
3 | FUNCTIONS_FLASH_UPDATE(0C03000H-0C04000H) |
4 | )
|
Im C-File musste man noch vor der Funktion eine Pragma-Anweisung setzen:
1 | pragma class pr=FUNCTIONS_FLASH_UPDATE |
2 | |
3 | void FlashUpdate(...) |
4 | {
|
5 | ...
|
6 | }
|
7 | #pragma default_attributes
|
Mit welchem Schlüsselwort kann ein solcher Speicherbereich im Linkerskript definiert werden ?
M.e.a. kein Schluesselwort, sondern extra Linkerskripte, deren Flash dort startet, wo der Bootloader hinspringt.
Im Anhang befindet sich das Linkerscriptfile, das ich derzeit verwende.
Entwickler schrieb: > Mit welchem Schlüsselwort kann ein solcher Speicherbereich im > Linkerskript definiert werden ? M. W. wird einfach ORIGIN des Flash-Bereichs auf die gewünschte Adresse gesetzt. Such mal nach Einträgen, in welchen nach "Start aus/im RAM" nachgefragt wird. Uwe Bonnes schrieb: > M.e.a. kein Schluesselwort, sondern extra Linkerskripte, deren Flash > dort startet, wo der Bootloader hinspringt. Man kann Linker-Skripte auch verketten bzw. mehrere Linker-Skripte mit -T angeben. In diesem Fall könnte man einfach den MEMORY-Bereich auslagern. Mann kann auch "include" in Linker-Skripten einsetzen. In diesem Fall etwas gekünstelt, mit -L könnte man verschiedene Verzeichnisse angeben. Bezieht sich alles auf GCC.
Ich habe im folgenden Dokument "EWARM_DevelopmentGuide.ENU.pdf" nachgeschaut. Leider konnte ich da nichts finden. Gibt es hier jemand der sich mit dem STM32F207 gut auskennt ?
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.