Atmega debuggen

Gast #1213527
Hallo,

ich hab das Problem, dass mein Atmega1280 + ENC board nach 2 - 5 Tagen 
einfach den Dienst verwehrt und garnichts mehr tut (nicht nur Netzwerk 
funktioniert nicht, sondern auch die einfachsten sachen in der main 
nicht)


Gibt es eine Möglichkeit das Ding 2 Tage laufen zu lassen bis es 
abstürzt und dann irgendwie via so einem JTAG zu sehen, was er gerade 
macht und denkt? (Also wo er sich im Programm befindet und hängt oder 
was evtl. für ein Fehler aufgetreten ist)


Bin wirklich etwas ratlos :(
Gast
Der Controller ist noch ok? Also Ein-Ausschalten hilft?

Ist es sicher, dass Deine Anwendung abschmiert? Und wie sollen wir Dir 
helfen, wenn wir nicht wissen, was Du eigentlich machst?

Einen Post-Mortem-Debugger müsstest Du Dir selbst zusammenschrauben. 
Vielleicht einfach ein paar Statusmeldungen ins EEPROM schreiben, aber 
Vorsicht! Das interne EEPROM kann nur 10000 Schreibzyklen (beim mega88) 
ab. Blick ins Datenblatt hilft.

Oder dasselbe mit externem RAM (das Du auch von extern auslesen kannst),
Gast
Also im Prinzip läuft da einfach nur der Stack von Ulrich Radig mit ein 
paar kleinen Erweiterungen um Ports zu schalten etc.

Was abschmiert weiß ich leider nicht, der Controller hält seine 
Pinzustände, macht aber einfach garnix mehr (in der hauptschleife wird 
eine Funktion aufgerufen, die auf Eingänge pollt und dann Ausgänge 
setzt, das funktioniert schon nichtmehr)

Strom Weg, Strom Rein und alles funktioniert sofort wieder ein paar Tage 
lang.

Was tut ein AVR eigentlich bei ner Division durch 0? Bin grad auf der 
Suche, ob ich sowas vielleicht eingebaut hab.


Grüße
Gast
Also mit dem JTAGICE MKii geht das.

Du musst allerdings alles schon "vorverkabeln", d.h. PC, JTAG sowie 
Board müssen die 2 Tage lang durchlaufen. Wenn sich der Prozessor dann 
aufhängt* klickst im AVRstudio auf "Pause" und du siehst die Codestelle

*aufhängt in dem Sinne, dass er eigentlich das macht was du programmiert 
hast, typische Fehler sind z.B.:
- Stack-Pointer modifizieren bei eingeschalteten Interrupts
- Register r0 modifizieren (der GCC geht davon aus, dass zu jeder Zeit 
eine 0 drin steht)
- Stack Overflows (irgendwelche Buffer überschreiben den Stack oder 
umgekehrt)

wenn er sich aber "richtig" aufhängt, z.B. durch 
Spanungseinbrüche/Spitzen oder Ausfall des Taktes hilft dir auch der 
Debugger nicht mehr.

Gruß
Roland
Gast
Dann werd ich mir mal so nen JTAG besorgen, anders komm ich irgendwie 
nichtmehr weiter :( V.a. ist der Testzyklus echt langwierig wenn es 
immer 5 Tage dauert bis man mal weiß, ob es nun tut oder wiedermal 
nicht...

Wenn er dann richtig abstürzt, dann weiß ich wenigstens, dass ich beim 
hardware bauen schrott gebaut hab und nicht in der software... So weiß 
ich irgendwie garnicht wo ich suchen soll.

Um Hardwareprobleme auszuschließen hab ich nun mal versucht den externen 
Quarz runterzunehmen und ihn mit dem internen osszilator zu betreiben. 
Sollte dann keine Antenne mehr geben und mit der kleineren Frequenz ist 
er dann auch vielleicht ein bisschen stabiler gegen 
Spannungsschwankungen (BOD ist aber auf 4,3V gesetzt)

Danke für euere Hilfe!
Gast
Also wenn er wirklich hängenbleibt und nix mehr tut, könnte man ja mal 
den Watchdog einschalten. Wenn er dann durchläuft, ist zwar die 
eigentliche Ursache nicht weg, aber zumindest das Problem, dass er 
irgendwann nix mehr tut.
Gast
Ansonsten mal über freie IO's (der Prozessor hat ja genug davon) sowie 
der uart ein-eindeutige Zustände ausgeben, die anzeigen, wo sich das 
Programm gerade befindet. Wenn die Ports nach dem Absturz erhalten 
bleiben, sollte das gehen. Vielleicht lässt sich da ein Muster ableiten 
und eine kritsche Stelle einkreisen.

Ganz blöd wird es nur, wenn das Programm mit den zusätzlichen Ausgaben 
nicht mehr abstürzt...

Oliver
Kanst Du nicht debug-Ausgaben auf eine serielle Schnittstelle ausgeben 
und am PC loggen ?

Ist Deine Stromversorgung stabil ? Abblockkondensatoren ?

Poste doch mal den Schaltplan und das Board. Vielleicht kann man da 
schon etwas sehen.

Als Softwarefehler bietet sich ein Stack-Overflow an, das ist natürlich 
schwer zu debuggen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.