STM32F4 Binärfile ins RAM schieben

Gast #4154430
Lesenswert?

Ja das geht.

Aber immer daran denken:
- das dann weniger RAM zum arbeiten übrig bleibt.
- 0xF1E0F85F an 0x200001E0 schreiben damit das Startverhalten 
vergleichbar bleibt und der Resethandler an 0x20000004 angesprungen wird
#4154456
Lesenswert?

Das überlege ich mir auch schon länger, da das Programm hoffentlich 
schneller ins RAM des STM geschrieben ist als ins flash.

Ich habe mir bisher nur konzeptionelle Gedanken dazu gemacht, aber 
vieleicht sind diese Hilfreich:

Zu allervorderst: Der STM kann Programme aus dem RAM ausführen und sogar 
direkt davon starten. Das können nicht alle Mikrocontroller, vor allem 
die kleinsten nicht.
Beim STM müssen einfach nur die beiden BootPins richtig eingestellt 
werden.
Jedoch sehe ich dabei ein gravierendes Problem:
Beim POR ist das RAM uninitialisiert. Davon zu starten kann böse in die 
Hose gehen. Um das zu verhindern, braucht es einen Bootloader im Flash, 
der das RAM initialisiert.

D.h.
1. Starten von Flash
2. RAM init (z.B. Image eines "while(1)"-Programms incl. 
InterruptVectorTabelle an Adresse 0x20000000 kopieren)
3. Bootpins umstellen
4. Reset (aber kein POR!)

Das ist aber wie gesagt nur ein grobes Konzept. Ob das tatsächlich 
funktioniert gilt es noch zu erforschen.

Wenn du eine saubere Lösung zum laufen griegst, kannst du vieleicht ein 
wiki-Artikel schreiben. würde mich freuen
Gast #4154481
Lesenswert?

So geht's auch:
* Boot Pins auf Flash lassen
* Leeres Dummy Programm flashen
* Linkerscript so anpassen dass Adressen für den RAM verwendet werden, 
zB indem der Memory "FLASH" einfach ab 0x20000000 statt 0x08000000 
beginnt; Größe und Anfang des "echten" RAM entsprechend anpassen
* Zur Sicherheit am Anfang des Reset_Handler den SP auf _estack setzen
* Am Anfang der main () das VTOR setzen damit die Interrupts aus dem RAM 
ausgeführt werden
* Das generierte ELF File ganz normal starten; da die darin enthaltenen 
Adressen nun auf den RAM zeigen wird nicht geflasht sondern nur in den 
RAM kopiert. Im Debugger aber keinen Reset auslösen lassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren