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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.