Forum: Mikrocontroller und Digitale Elektronik Atmega debuggen


von Tom (Gast)


Lesenswert?

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 :(

von nixVerstaan (Gast)


Lesenswert?

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),

von Tom (Gast)


Lesenswert?

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

von Roland Praml (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

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!

von MeinerEiner (Gast)


Lesenswert?

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.

von Oliver (Gast)


Lesenswert?

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

von Pete K. (pete77)


Lesenswert?

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.

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.