Forum: Projekte & Code STM32F4 Fault Handling


von Little B. (lil-b)


Angehängte Dateien:

Lesenswert?

Hallo Community!

Ich möchte an dieser Stelle ein Stück Code bereitstellen, der vieleicht 
das Debugging auf STM32F4xx erleichtert.

Der Code besteht aus zwei Teilen. Der erste Teil stellt einen Debug 
Buffer zur Verfügung, der Strings im CCM RAM speichert. Da dieser für 
gewöhnlich beim Startup des Controllers nicht initialisiert wird, können 
auch Daten nach einem Reset gelesen werden.
Diese Funktion kann auch ins write() eingebunden werden, z.B. als 
stderr.

Die zweite Funktion fängt alle Faults ab, die im Cortex M4 auftreten 
können. Die entsprechenden Status Register werden ausgelesen und im 
Klartext in den Debug Buffer geschrieben. So kann man mit einem Blick 
ins CCM RAM herausfinden, an welchem PC welcher Fault entstanden ist, 
und weshalb, auch wenn man den Reset verpasst hat.

Der Code ist für FreeRTOS geschrieben, aber durch herausnehmen der 
relevanten Zeilen in den Interrupts kann man den code auch BareMetal 
verwenden.

~Lil B

von Guest (Gast)


Lesenswert?


von Little B. (lil-b)


Lesenswert?

Guest schrieb:
> Ganz nett...aber wer es wirklich einfach haben will:
>
> 
https://www.segger.com/admin/uploads/productDocs/AN00016_AnalyzingHardFaultsOnCortexM.pdf

Wirklich einfacher finde ich das nicht. Es gibt sicher auch weitere 
Ansätze, wie man Faults behandeln kann, die alle im Prinzip das selbe 
tun.

Ich möchte nochmals hervorheben, dass mein Ansatz die Fault-Ursache mit 
allen verfügbaren zusatz-Informationen im Klartext in einen 
Fehlerspeicher ablegt. So ist man nicht mehr auf das Datenblatt 
angewiesen, wenn man den Fehler sucht. Desweiteren ist man auch nicht 
auf einen Debugger angewiesen, der in deinem Link zwangsläufig benötigt 
wird.
(Einfach DebugBuffer_Dump() auf einen USART seiner Wahl umleiten und 
z.B. beim Startup aufrufen)

von Guest (Gast)


Lesenswert?

Little B. schrieb:
> Wirklich einfacher finde ich das nicht. Es gibt sicher auch weitere
> Ansätze, wie man Faults behandeln kann, die alle im Prinzip das selbe
> tun.

Echt nicht? Was ist daran kompliziert? Datei zum Projekt hinzufügen und 
laufen lassen.

Little B. schrieb:
> Desweiteren ist man auch nicht
> auf einen Debugger angewiesen, der in deinem Link zwangsläufig benötigt
> wird.

Klar, da gebe ich dir völlig recht...aber wer debuggt den einen Cortex M 
ohne Debugger?? Ob ich jetzt ins Watchfenster oder Memoryfenster schaue 
ist doch gleich.

Wollte aber dein Projekt nicht schlecht machen sondern nur eine 
Alternative zeigen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.