Bootloader mit STM32F207

Gast #2492969
Lesenswert?

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.
Gast #2493994
Lesenswert?

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
Gast #2494020
Lesenswert?

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
#2494409
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren