Forum: Mikrocontroller und Digitale Elektronik stm32: Partitionieren; bootloader flash ab best. adresse


von har (Gast)


Lesenswert?

Hallo liebes Forum,

verwendet werden zwei STM32F303-Mikrocontroller. Ein uC fungiert quasi 
als Master und der Andere als Slave.
Dabei habe ich den Master so programmiert, dass dieser den Slave 
programmiert (mittels des Bootloaders).
Grundsätzlich funktioniert das, allerdings nur, wenn ich genau an 
folgende Adresse im Flash programmieren: 0x08000000.
Ich würde gerne einen bestimmten Code auch an eine beliebige andere 
Adresse schreiben und ausführen können. Schreiben funktioniert, aber das 
Ausführen nicht.
Ich möchte, dass dies möglich ist, da ich den STM32F303 partitionieren 
will. Somit könnte ich zB zwei unterschiedliche Programme in den Flash 
speichern und je nach Modus das eine oder andere Programm starten. 
Grund: das eine Programm könnte der "normale" Code sein und das andere 
ein Update.

Falls mir hier jemand helfen könnte, dann bin ich über jeden 
Tipp/Hinweis/Beispiel dankbar!

von Ruediger A. (Firma: keine) (rac)


Lesenswert?

Das geht schon. Der Cortex Befehlssatz hilft dabei; z.B. sind alle 
Sprünge PC-relativ, also ist Code, der nicht auf absolute Adressen 
zugreift (z.B: Lesen aus der const Section) automatisch relozierbar. 
Beim Zugriff auf Konstanten kannst Du mglw. mit based pointers oder 
Tabellen arbeiten. Interessant wird's beim RAM, den Du schon über den 
linker command file so vorpartitionieren musst, dass sich die beiden 
Parallelmodule nicht in die Quere kommen.

Kapitel 9 in meinem Buch beschäftigt sich ausführlich mit Bootloadern 
für Cortex M3 und M4 (Kapitel 2 beleuchtet darüber hinaus den 
Befehlssatz), vielleicht hilft ja das eine oder Andere fürs weitere 
Verständnis.

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.