Forum: Mikrocontroller und Digitale Elektronik Fehlersuche im Hardfault


von HardFault (Gast)


Lesenswert?

Hallo,

das Problem ist, dass ich mit einem Programm das schon etwas komplexer 
ist zu ungewissen Zeitpunkten in einen Hardfault laufe.

Was kann denn alles die Ursache sein?

Mir fällt eigentlich nur ein:

1. Schreiben über Arraygrenzen

2. Lesen außerhalb von Arraygrenzen? --- Da bin ich mir schon nicht so 
sicher

3. weiteres?

von Peter II (Gast)


Lesenswert?

um was für ein eine CPU geht es überhaupt.

von Jim M. (turboj)


Lesenswert?

Ich hatte mal einen unaligned 32 Bit Pointer (uint32_t*), und der 
Compiler hat eine LDRD Instruktion für einen 8 Byte Load generiert.
Danach sucht man sich dusselig.

Ansonsten: Breakpoint im Handler setzen und im Debugger mal den Call 
Stack anschauen.

von HardFault (Gast)


Lesenswert?

ist ein STM32F4.

Der Call Stack ist leider empty

von Jim M. (turboj)


Lesenswert?

Und was steht im SP so drin? Lass Dir doch nicht alles aus der Nase 
ziehen, so kann Dir keiner helfen.

von Schreiber (Gast)


Lesenswert?

HardFault schrieb:
> 3. weiteres?

Debugger und Logic Analyzer dran und alles aufzeichnen. Anschließend 
prüfen, wann das Problem auftrat.

Anschließend passende Stelle im Quellcode suchen.

von TMK (Gast)


Lesenswert?

Da wirst Du dich langsam an die kritische Stelle vortasten müssen. Was 
heisst denn "ein Programm das schon etwas komplexer ist"? 1000 Zeilen, 
10000, 100.000? In der Regel ist doch eine Ausgabemöglichkeit vorhanden 
(Debug, Trace, Seriell, LCD-Display...) Komplexe Programme tun in der 
Regel auch was. ;-) Lass Dir regelmässig Ausgaben zum Programmstatus 
geben.
Es wird dir keiner ein Rezept geben können, das Finden so eines Fehlers 
kann schwierig sein...

von LTC1043 (Gast)


Lesenswert?


von Forist (Gast)


Lesenswert?

HardFault schrieb:
> einen Hardfault

HardFault schrieb:
> ist leider empty

Brauchst du mal ein deutsches Wörterbuch?

von Jobst M. (jobstens-de)


Lesenswert?

> Autor: HardFault (Gast)

Der Benutzer ist der hard fault ...


Gruß

Jobst

von Marco H. (damarco)


Lesenswert?

- Zugriff auf ungültigen Pointer -> insbesondere Funktionspointern
- Fehlerhaftes Memory Management
- Fehlern von Peripherie die nicht mit eignen Handlern abgefangen 
werden.
- usw.

alles das was sich bei einer sauberen Programmierung vermeiden lässt. 
Die auch in der Lage ist Fehler abzufangen.

von HardFault (Gast)


Lesenswert?

eine Frage noch:

Kann das Lesen oberhalb von Arraygrenzen zu HardFault Fehlern führen, 
oder muss man dafür schon scheibend drauf zugreifen?

von Tom (Gast)


Lesenswert?

HardFault schrieb:
> Kann das Lesen oberhalb von Arraygrenzen zu HardFault Fehlern führen,
> oder muss man dafür schon schreibend drauf zugreifen?

Das interessiert den Cortex-M Core nicht. Der weiß nichts von deinem 
Array. Die Frage ist nur, ob hinter deinem Array gültiger Speicher 
liegt.

Hier findest du eine App Note
https://www.segger.com/downloads/appnotes/AN00016_AnalyzingHardFaultsOnCortexM.pdf

und den passenden HardFault Handler:
https://www.segger.com/downloads/appnotes/HardFaultHandler.zip

von Cyborg (Gast)


Lesenswert?

So wird das sowieso nichts. Du musst schon den Programmabschnitt
isolieren, wo der Fehler auftritt. Debugging oder Logikanalyse
wurde doch schon genannt, aber auch Hilfsvariable mit Output können
helfen, aber wenn ein Programmierer Spaghetticode schreibt, kannst
du hier so viel posten bis die Finger wund sind, es bringt dich
nicht weiter.

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.