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).