Forum: Mikrocontroller und Digitale Elektronik Fehlerbehandlung: ESP32 <--> ATSAM


von Alexander M. (a_lexander)


Lesenswert?

Hallo Zusammen,

Vielleicht kann mir hier jemand weiterhelfen ;)

Aktueller Fall: Fehler tritt bei einem ATSAM sporadisch (sehr selten) 
auf, ein Debugger etc. kann nicht ohne weiteres angeschlossen werden. 
Trotzdem würde ich gern den Fehler bestmöglichst eingrenzen können.

Was mir ziemlich weiterhelfen würde, wäre eine ähnliche Fehlerausgabe 
wie es der ESP32 macht. Hier ist ein Beispielbild:
https://user-images.githubusercontent.com/13808314/55786107-3504dd80-5ae6-11e9-98ca-abf6452ab9b3.png
--> Sobald der ESP32 eine Exception wirft, werden (genau so wie im 
ATSAM) die Register angezeigt und zusätzlich die jeweiligen zuvor 
aufgerufenen Funktionen.

Gibt es die Möglichkeit, so eine Speicherung der letzten Funktionen auch 
im ATSAM / auf anderen uC zu implementieren?

Danke & Grüße ;)

von Jim M. (turboj)


Lesenswert?

Suche mal nach "Hardfault Handler" - es gibt da diverse Beispiele.

Hat allerdings den Nachteil das man nicht alle Fehler abfangen kann - 
insbesondere sowas wie Stack Overflow oder ungültigen SP.

Backtrace ist vom Flash Speicher her nicht ganz billig - meistens ist 
auf dem µC nicht genug Platz für Debug Symbole. Könnte hier aber auch 
eine Funktion sein, die die Adressen mittels addr2line auf dem PC 
übersetzt.

von Stefan F. (Gast)


Lesenswert?

Alexander M. schrieb:
> Aktueller Fall: Fehler tritt bei einem ATSAM sporadisch auf

Welcher Fehler denn?

Zeige deinen Schaltplan und Fotos vom Aufbau wo man den Leitungsverlauf 
der Stromversorgung sehen kann.

von Alexander M. (a_lexander)


Lesenswert?

Danke ;)

@Stefan:
Mir geht's hier in erster Linie darum, ob es denn überhaupt solche 
Backtrace-Möglichkeiten auch in Microchip-uC gibt?

Sowas würde die Fehlersuche bei Runtime Excpetions natürlich schon 
ziemlich vereinfachen... ;)

Oder anders die Frage:
Wie debuggt ihr Runtime Exceptions bei Mikrocontrollern?

Grüße :)

von Stefan F. (Gast)


Lesenswert?

Alexander M. schrieb:
> Mir geht's hier in erster Linie darum, ob es denn überhaupt solche
> Backtrace-Möglichkeiten auch in Microchip-uC gibt?

Im Prinzip schon. Der Chip hat entsprechende Interrupts und einen Stack. 
Dazu braucht man noch die Information, welche Funktion (Namen) auf 
welcher Adresse im Speicher liegt. Die hat man normalerweise nicht im 
Maschinencode drin.

> Wie debuggt ihr Runtime Exceptions bei Mikrocontrollern?

Wenn er abstürzt während ein Debugger mit dem Chip verbunden ist, kann 
der Debugger die Adressen vom Stack auswerten und die Stellen im 
Quelltext anzeigen.

Wirklich genutzt habe ich das aber noch nie, weil ich Mikrocontroller 
mit diesem Feature erst seit kurzem benutze. Ich bin mit Teilen 
aufgewachsen, die das nicht konnten. Außerdem treten solche Fehler gerne 
nur dann auf, wenn man den Debugger wieder abgeklemmt hat.

Sporadische Abstürze kommen meisten von mangelhafter Stromversorgung, 
das kann man mit Messinstrumenten prüfen. Ansonsten kann man in das 
Programm Debug-Meldungen einbauen, die man seriell an den PC sendet und 
in eine Datei schreibt. Wenn der Controller immer wieder an der gleichen 
Stelle abstürzt, geben die letzten Debug-Meldungen einen Hinweis darauf, 
wo das war.

von Alexander M. (a_lexander)


Lesenswert?

Stimmt, ich könnte mir natürlich mal den Stack anschauen...

Mangelhafte Stromversorgung hatte ich auch schon in meinen Gedanken als 
Ursache, könnte mit so einem "Backtrace" super aufgezeichnet werden 
(Stichwort: brownout detection).

Danke :)

: Bearbeitet durch User
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.