Gute Tagsituation, Ich habe eine Frage an die Kenner. Kann man den Programmcode, der sich normal im uC Flash befindet, wenigstens zum Teil aus einem externem Nor Flash ausführen? Etwas RAM wäre noch vorhanden. Lohnt es sich das Thema weiter zu verfolgen, oder gleich ‚vergiss es‘?
Nix vergiss es, es geht auf jeden Fall. Wie einfach bis aussichtslos es wird hängt allerdings stark von der Anwendung ab. Der einfachste Fall wäre z.B. ein Programm für viele ganz verschiedene Sensoren, von denen aber immer nur einer zur Zeit benutzt wird. Die vielen "Treiber" hätten alle die gleiche Schnittstelle und wären klein genug, dass man sie ins RAM kopieren kann. Dann kann das Hauptprogramm sie wie jede andere Funktion ganz normal aufrufen. Alle diese Funktionen müssen auf die gleiche Adresse (im RAM) gelinkt werden. Deshalb muss man jede Funktion einzeln übersetzen, praktisch wie ein eigenständiges Programm. Der Linker kennt evt. noch Overlays, aber ob das einfacher wird? Die Adresse im externen Flash ist davon unabhängig und muss vom Hauptprogramm in einer Liste verwaltet werden. Dann braucht man noch ein Hilfsprogramm, dass die vielen kleinen "Programme" ins externe Flash kopiert und die Liste erzeugt. Das andere Extrem wäre, beliebige Teile von einem normalen Programm extern zu speichern. Solange jedes Teil genau eine Funktion ist und sich diese Funktionen nicht gegenseitig aufrufen... und keine Interrupts dazwischen kommen... und der uC eine MPU hat... würde diese einen Memory Management Fault auslösen und der Handler würde die passende Funktion ins RAM kopieren... ja, warum nicht, es gibt ja noch lange Winterabende ;) Viele F4, G4, L4, H7... haben ein QSPI mit dem das externe Flash wie internes in den normalen Adressraum gemappt werden kann. Damit funktioniert XIP (Execute In Place), man braucht kein RAM und muss das Programm nur noch zweiteilen (zwischen den internen und externen Flash-Adressen ist ein Loch).
:
Bearbeitet durch User
Guho i2c schrieb: > Lohnt es sich das Thema weiter zu verfolgen Schau dir mal "FSMC" an: - https://www.st.com/resource/en/application_note/an4761-using-stm32l476486-fsmc-peripheral-to-drive-external-memories--stmicroelectronics.pdf Seite 168 - Kap. 10 Flexible static memory controller (FSMC) - https://www.st.com/resource/en/reference_manual/dm00043574-stm32f303xb-c-d-e-stm32f303x6-8-stm32f328x8-stm32f358xc-stm32f398xe-advanced-arm-based-mcus-stmicroelectronics.pdf
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.