2016-05-06 12 views
0

fangen Ich arbeite mit einem MCF51EM256 Freescale-Mikrocontroller und ich habe einige Probleme mit der Flash-Programmierung.Wie kann ich einen unerwarteten Reset in einem Mikrocontroller

Um meine Software dauerhaft zu machen, versuche ich einige Variablen im externen Flash-Speicher zu speichern, um von unerwarteten Stillständen zu erholen.

Manchmal, wenn ich meine Arbeit herunterfahre, wird die MCU ständig zurückgesetzt. Es wird wahrscheinlich durch einen Fehler beim Schreiben einer Flash-Adresse während des Herunterfahrens verursacht, der danach nicht in der Lage ist, richtig zu lesen.

Meine Frage ist, gibt es eine Möglichkeit, diese schwerwiegende Ausnahme zu fangen, die den Reset in meinem Mikro verursacht?

MCF51EM256 Reference Manual

+0

Wenn es ein Wachhund ist, wahrscheinlich nicht. Können Sie andernfalls einen Haltepunkt auf den Reset-Vektor setzen und/oder einen Reset-Handler installieren, der einen Stack/Register-Dump ausführt? –

+0

Wenn der Flash-Datenspeicher aufgrund von "normalen" Softwareentwicklungsproblemen beschädigt ist, sollten Sie die fehlerhaften Daten erkennen und eine Fehlerinformation ausgeben oder zwei Bänke verwenden, sie CRCs schreiben und sie abwechselnd verwenden oder andere verwenden Fehlerminderungsstrategie. –

Antwort

3

Wenn das beschriebene Verhalten in der Tat durch den Grund, warum Sie davon ausgehen, verursacht wird, könnte man sich davor schützen, unbeständig geschriebene Werte aus dem Flash mit einem „Zauberwort“ geschrieben zu einem bekannten Ort am Ende des Blitzes schreiben.

Beim Herunterfahren, löschen Sie Ihr "Zauberwort", dann flashen Sie Ihre gespeicherten Werte wie Sie bereits, und schließlich schreiben Sie das "magische Wort" (wie 0x31419265) an einen bekannten Speicherort.

Überprüfen Sie diesen Wert beim Start. Wenn es der Wert ist, den Sie erwarten, können Sie die anderen Variablen verwenden, wenn nicht, müssen Sie davon ausgehen, dass das Flash-Schreiben fehlgeschlagen ist und sie ignorieren (Sie würden dann vernünftige Standardwerte benötigen, nehme ich an).

+0

Mit Flash können Sie einzelne Bits in eine Richtung ändern, aber nicht die andere, Sie können nicht löschen, dann ein Zauberwort an einem bekannten Ort wiederherstellen, ohne dass eine dieser zwei Aktionen Sie einen ganzen Block löschen müssen. –

+0

Eine Variante wäre, den neuen Datensatz am Ende im gelöschten Teil des Flashs mit einer Art Prüfsumme zu ergänzen. Beim Boot scannen Sie den Flash nach dem Ende (gelöschter Teil, normalerweise alle 0xFFs, einfach mit Ihrem spezifischen Teil zu testen), vielleicht überprüfen Sie die Datenblöcke auf dem Weg oder arbeiten von hinten nach vorne. Verwenden Sie den letzten mit einer guten Prüfsumme. –

+0

Wie Mfro sagt, markieren Sie die Daten so, dass das letzte Geschriebene den Datensatz miteinander verbindet, so dass Sie feststellen können, ob es sich um einen vollständigen Datensatz handelt oder nicht. Wie Sie es markieren, kann auf mehrere Arten gelöst werden. magische Zahlen, Prüfsummen, implementieren ein Dateisystem, etc. –