Forum: Mikrocontroller und Digitale Elektronik Fehlersuche im Hardfault


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von HardFault (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
um was für ein eine CPU geht es überhaupt.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
ist ein STM32F4.

Der Call Stack ist leider empty

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

von Forist (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
HardFault schrieb:
> einen Hardfault

HardFault schrieb:
> ist leider empty

Brauchst du mal ein deutsches Wörterbuch?

von Jobst M. (jobstens-de)


Bewertung
-1 lesenswert
nicht lesenswert
> Autor: HardFault (Gast)

Der Benutzer ist der hard fault ...


Gruß

Jobst

von Marco H. (damarco)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.