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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.