Wie führe ich eine Funktion aus dem RAM auf einem Cortex-M3 (STM32)?

Ich versuche, eine Funktion ausführen aus dem RAM auf einem Cortex-M3-Prozessor (STM32). Die Funktion löscht die und schreibt den internen Blitz, so dass ich auf jeden Fall muß sich im RAM befinden, aber wie mache ich das?

Was ich versucht habe ist dieser: Kopiere die Funktion in ein byte-array im RAM mit memcpy (überprüfung, dass es korrekt ausgerichtet), die Einstellung der Funktion-Zeiger auf den byte array ein, dann das aufrufen der Funktion(pointer).

Dies funktioniert gut für vielleicht 10 Anleitungen (die ich Folgen kann die Ausführung mit dem debugger), aber dann bekomme ich eine buss-Fehler und der Prozessor wird zurückgesetzt. Die buss-Fehler tritt auf den zweiten Durchgang durch eine Schleife, so dass der code sollte in Ordnung sein (da es den ersten pass). Ich denke, dass die schnelleren RAM-Zugriff mucks bis der buss timing in gewisser Weise...

Jedenfalls gibt es einen richtigen Weg, dies zu tun? Wie wäre es mit einer scatter-Datei so Aussehen, dass Orte, die eine Funktion im RAM automatisch (ich verwende Keil uVision für Cortex-M3)?

Edit: Mehr info:
Toolchain: RealView MDK-ARM V 4.10
Compiler: Armcc v4.0.0.728
Assembler: Armasm v4.0.0.728
Linker: ArmLink v4.0.0.728
Prozessor: STM32F103ZE

Den IMPRECISERR bit gesetzt ist, in der buss-Fehler registrieren, wenn Sie die reset passiert.

  • Ähmm ich denke, Sie sollten mehr oder weniger post, die der Hersteller dem forum, wie Sie mit Hilfe einer bestimmten hardware-Komponente, dennoch kann man mehr details, welchen compiler benutzt du, wie sind Sie Debuggen, alle code-Beispiele, vielleicht einer person, die wissen könnte in der Lage sein, diese zu beantworten, als die anderen....
  • Aber ich mag Sie Jungs mehr!
InformationsquelleAutor c0m4 | 2010-06-15
Schreibe einen Kommentar