Ausführbare Datei von externem SRAM ausführen

Ich habe ein STM32-Entwicklungsboard mit etwas externem SRAM. Ich möchte meinen Code von diesem externen SRAM ausführen, aber mein Prozessor unterstützt nur das Booten vom Flash, internen SRAM oder Systemspeicher (ein Teil des internen SRAM).

Was ist der einfachste Weg, Code von einem externen SRAM auszuführen?

Hinweise: Ich lade Code mit OpenOCD über JTAG und verwende GDB.

Wie wird Ihr Programm überhaupt in das externe SRAM gelangen?
@vicatcu: Ich habe einen funktionierenden Treiber, der in C geschrieben ist.

Antworten (1)

Bevor Sie mit der Ausführung von Code aus dem externen RAM beginnen können, müssen Sie zuerst FSMC initialisieren und Ihren Code in diesen RAM kopieren, sodass Sie sowieso vom Flash booten müssen. Ein richtig geschriebenes Linker-Skript (mit einem zusätzlichen Codeabschnitt, der an der richtigen Adresse verlinkt, aber im Flash platziert ist, wie der .data-Abschnitt) wird sehr hilfreich sein. Sie können Funktionen, die Sie im RAM platzieren müssen, mit einem korrekten Abschnittsattribut markieren . Nachdem FSMC initialisiert wurde, kopieren Sie diesen Abschnitt in den RAM, genauso wie .data in Ihren Startcode kopiert wird. Alles, was übrig bleibt, ist, Ihre RAM-Funktionen auf normale Weise aufzurufen.

Beachten Sie zwei schwerwiegende Probleme beim Ausführen von externem SRAM:

  1. Es wird langsam. Etwa 6 bis 8 Mal langsamer als die Ausführung vom Flash oder sogar vom internen SRAM . Diese Mikrocontroller-Architektur ist einfach nicht für diese Art von Verwendung optimiert .

  2. Einige STM32-Chips haben einen Siliziumfehler, bei dem der FSMC-Zugriff durch zwei Busmaster den Chip zum Absturz bringt. Dies wird Sie grundsätzlich von der Verwendung von DMA ausschließen. Dies betrifft STM32F103 Revision Y IIRC, wahrscheinlich auch andere Chips.

Also ich persönlich würde das nicht machen. Noch einmal muss ich auf dieser Website wiederholen, dass Mikrocontroller! = CPU, auch wenn es ein ARM ist.