Forum: Mikrocontroller und Digitale Elektronik Stm32f3 Programm aus dem externen Flash ausführen


von Guho i2c (Gast)


Lesenswert?

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‘?

von Bauform B. (bauformb)


Lesenswert?

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
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?


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.