Forum: Mikrocontroller und Digitale Elektronik Bootloader mit STM32F207


von Entwickler (Gast)


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.
von Sven Wagner (Gast)


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
von Entwickler (Gast)


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
von Entwickler (Gast)


Lesenswert?

Mit welchem Schlüsselwort kann ein solcher Speicherbereich im 
Linkerskript definiert werden ?
von Uwe Bonnes (Gast)


Lesenswert?

M.e.a. kein Schluesselwort, sondern extra Linkerskripte, deren Flash 
dort startet, wo der Bootloader hinspringt.
von Entwickler (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang befindet sich das Linkerscriptfile, das ich derzeit verwende.
von Roland H. (batchman)


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.
von Entwickler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.