Frage

Ich möchte zwei Anwendungen in meinem STM32 Flash haben, ist im Grunde ein Boot und die andere die ‚Haupt‘ Anwendung. Ich habe herausgefunden, wie jeden von ihnen in verschiedene Bereiche des Blitzes zu laden und nach der Einnahme ein Speicher-Dump alles sieht aus wie es an der richtigen Stelle ist.

Wenn ich also einen Reset mache es das Boot lädt, alle bootet im Moment Sprung zur Anwendung. Debuggen des Boot, scheint dies alles korrekt funktioniert. Doch die Probleme kommen, nachdem ich den Sprung zur Anwendung gemacht habe, es führt nur eine Anweisung (Montag) und dann auf das Boot springt zurück. Es sollte auf unbestimmte Zeit in der Anwendung bleiben.

Meine Frage ist dann, wo soll ich ‚Sprung‘ in der App?

Es scheint, dass einige potenzielle Flecken, wie die Interrupt-Vektoren sind, die Reset-Handler, die Hauptfunktion der App. Eigentlich habe ich alle diejenigen ohne Erfolg versucht.

Wir hoffen, die Sinn macht, ich werde die Frage aktualisieren, wenn es nicht.

Danke für Ihre Hilfe! Richard

Updates:

  • hatte ich ein Spiel um im Debugger und verändern das Programm manuell entgegen die Haupt der Anwendung und gut, die einen Charme gearbeitet, so macht es mir denken, es ist etwas falsch mit meinem Sprung ist, warum das Programm nicht Zähler halten nach dem Sprung geht?
  • Eigentlich scheint es der PSR zu sein, das ‚T‘ auf dem Sprung zurückgesetzt wird, wenn ich festgelegt, dass wieder nach dem Sprung mit der App auf weiter als ich wünsche
  • gefunden Ok, eine Lösung scheint, dass Sie den PC LSB auf 1 gesetzt haben müssen, wenn Sie einen Zweig zu tun oder es fällt in den ‚ARM‘ Modus (32-Bit-Befehl anstelle von 16-Bit-Befehlen wie in dem ‚Daumen‘ Modus . Ganz ein dunkles kleines Problem, danke, dass ich es mit Ihnen teilen!
War es hilfreich?

Lösung

Stellen Sie sicher, dass Sie an eine Adresse zu springen, wo die LSB 1. Diese Website für eine Erklärung finden: http://www.embedded.com/columns/beginerscorner/15200241?_requestid=162471

Andere Tipps

Sie möchten vielleicht für die IAP (In-Anwendungsprogrammierer) suchen, ermöglicht es Ihnen, Code aus dem RS232 PSORT auf dem STM32 zu Bootloader. Ich begann mit und da es den Quellcode bietet, ist es sehr einfach, es für Ihre Zwecke zu ändern. grundsätzlich nach einem Reset können Sie die IAP-Code zu Bootload entweder von der Adresse 0x08002000 oder Adresse 0x08003000 sagen. dann alles, was Sie tun müssen, um eine Flagge im Anwendungscode gesetzt ist, dann Neustart sagen und die neue Anwendung wird dann läuft ich hoffe, das hilft.

Richard,

Ich habe versucht, das Gleiche zu tun, um Ihnen gelungen, aber hatte Probleme. Ich wurde mit der IAR IDE und die * .icf-Datei (im „proj“ Verzeichnis) aktualisierte meine Anwendung auf 0x08002000 zu setzen und geladen, um ein eigenes Projekt auf 0x08000000, die nur einen Sprung an die Adresse hat am Reset-Vektor bei 0x08002004. Der Boot-Code gestartet und scheint auf den Start der Anwendung zu springen, aber die Anwendung nicht irgendwann während der IAR Initialisierung bei einer Illegal Instruction Fall endet.

Nach einem Einzelschritt durch den Anwendungscode, fand ich, dass ich die Interrupt-Vektor-Basisadresse zu der der Anwendung zu setzen vergessen. Es deutet noch auf 0x08000000 und damit der Code wurde verrückt. einen Anruf hinzufügen, bevor die Vektoradresse festlegen ermöglicht jegliche Unterbrechungen mein Problem gelöst und ist erforderlich, wenn Sie wollen in Flash eine Anwendung verschoben haben.

Ira.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top