STM32F4 Fault Handling

OP #4303043
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
Angehängte Dateien:
OP #4306969
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)
Gast #4309581
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren