Kleine Frage zu Absturz

OP #1044073
Lesenswert?

Hallo,

da mein Projekt (Datalogger mit SD-Karte) so nach ca. 6 Stunden abstürzt 
wollte ich mal fragen, ob es notwendig oder sinnvoll ist, 100 Ohm 
Widerstände in die Signalwege einzubauen.

Kondensatoren habe ich IMHO genug spendiert, es findet auch kein Reset 
statt, sondern der µC bleibt einfach "hängen".

Ich habe die SD-Karte z.B. direkt mit dem SPI verbunden, SD_Karte hat 
100nF bekommen.

Viele Grüße,
Pete
OP #1044084
Lesenswert?

Spannung ist sauber, Watchdog wird nicht benutzt.

Und Softwarefehler ... ich glaube, die kann man nie ausschließen.

Ist nur komisch, dass das ganze erst nach 6 Stunden (mal mehr, mal 
weniger) ausfällt. D.h. 6 Stunden lang funktioniert die Software 
einwandfrei. Flash vom M32 ist zu 60% gefüllt, Ram zu 80% (sagt 
AVR-Studio).

Aktuellen Schaltplan habe ich nicht, da ich von 5V auf 3,3V umgestiegen 
bin und die SD-Karte per 5cm Litze an den ISP-Stecker angelötet habe.
Gast #1044090
Lesenswert?

Tja, kann schon sein das du unter manchen Betriebsbedingungen mehr Stack 
brauchst als unter anderen und der dann irgendwann zufällig voll ist. 
Bei
80% Ram-Bedarf ist dann nicht mehr viel Platz auf dem Stack für z.B. 
große lokale Variablen oder rekursiv aufgerufene Funktionen.

Gibt es denn einen Prozess, der nach 6h zum ersten mal aufgerufen wird?

Möglichkeiten gibt es da viele....

Achja, wieso verwendest du keinen Watchdog? Dann läuft deine Anwendung 
zwar nicht stabiler, aber sie fängt sich zumindest schnell wieder 
anstatt auf ewig fest zu hängen. ;)
Gast #1044104
Lesenswert?

Der Watchdog ist ein Timer, der den Controller vollständig resetet, wenn 
er Null erreicht. Deshalb muss deine Anwendung ihn regelmässig auf einen 
bestimmten Wert setzen um zu verhindern das er abläuft.

"Frisst" sich deine Anwendung nun irgendwo fest, sorgt der Watchdog für 
einen sauberen Reboot.

siehe auch 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_Watchdog

Was genau wird den gemessen?
Gast #1044127
Lesenswert?

>Was genau wird den gemessen?

Ist doch eigentlich Wurst ;)
Interessanter wäre welcher uC, und SD Karte
mit FAT oder nicht? Falls FAT wird das Dateisystem
im Kartenleser nach dem Crash noch erkannt?

Fragen über Fragen...

Wenn ein uC mit 1k RAM verwendet wurde könnte
man mal versuchen einen pingleichen mit 2k RAM
einzusetzen (wenns einen gibt).
#1044132
Lesenswert?

Hmm... wrote:
> Achja, wieso verwendest du keinen Watchdog?

Weil das die völlig falsche Methode wäre, einen Fehler zu finden.

Ein Watchdog behebt den Fehler nicht, sondern kaschiert ihn.
Er wird in jedem Fall eine Fehlfunktion bewirken, wenn er auslöst.
Z.B. der Datenlogger wird Records verlieren oder ungültige Records 
abspeichern oder im Worst-case sogar das Filesystem zerstören.


Solange die Software auf dem Entwicklertisch liegt, gehört ein Watchdog 
immer ausgeschaltet!
Erst nach Abschluß der Entwicklung wird der Watchdog eingebaut und 
getestet.


Den Fehler muß man also mit Überlegung suchen. Z.B. sollte man erstmal 
feststellen wie weit der MC hängen bleibt. Man kann in einem 
Timerinterrupt ein LED blinken lassen. Blinkt diese beim Hängenbleiben, 
dann ist irgendwo in der Mainloop ne falsche Bedingung (z.B. fehlender 
Default-Zweig) drin. Dann kann man in dem Blinkinterrupt einen Taster 
abfragen, um nen RAM-Dump ausgeben zu lassen und den Stackpointer. Damit 
weiß man, wo der MC hängt.

Bei nem Watchdogreset werden dagegen Stack und PC resettet und man weiß 
garnichts.


Peter

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