Forum: Mikrocontroller und Digitale Elektronik Abstürze und Debuger zeigt fast nichts


von Rolf Freitag (Gast)


Lesenswert?

Mit einem Programm habe ich auf MSP430 das Problem, das es nach rund 
einer halben Stunde abstürzt, also der MC auf Eingaben von Außen nicht 
mehr reagiert.
Deshalb hab ich des mehrmals mit dem Debuger C-Spy laufen lassen, aber 
beim abgestürzten Programm zeigt es nur die Basis-Register (SP, PC, R3 - 
R 15) ; die betreffende Stelle im Source Code wird nicht angezeigt (das 
Fenster ist nur weiß) und zu Registern wie ADC12IFG kommt nur

ADC12IFG: Error[63]: Variable not active
Also habe ich mir SP und PC angesehen, aber bei denen tut sich nicht 
viel: Entweder ist der SP fest auf 09E0 und PC wechselt nur von 055E zu 
0562 und zurück (AM) oder der SP ist fest auf 09F0 und der PC fest auf 
10 (irgendein LPM laut C-Spy).
Was bedeutet das?
Muss man für den IAR-Compiler noch in jede zweite Zeile ein nop 
einfügen?

von Matthias (Gast)


Lesenswert?

Hi

Spannungsspitzen und schlechte Abblockung kannst du ausschließen?

Matthias

von Rolf Freitag (Gast)


Lesenswert?

Ja, denn jetzt habe ich zur Sicherheit die betreffende Platine in das 
geerdete Gerät eingebaut in dem andere Software schon tagelang lief und 
nun habe ich den Absturz schon nach 21 Minuten.

von Matthias (Gast)


Lesenswert?

Hi

das heißt noch lange nicht das deine Platine korrekt gegen Ground Bounce 
und ähnliches geschützt ist. Wenn der Absturz aber immer nach gleicher 
zeit erfolgt würde ich auf einen Stacküberlauf (in einer selten 
aufgerufenen Routine) tippen.

Matthias

von Rolf Freitag (Gast)


Lesenswert?

Weil die Hardware schon seit Jahren produziert wird und die Rücklaufrate 
der ca. 100.000 Geräte nicht allzu groß ist, kann es nur die Software 
sein.

Merkwürdig ist, dass der Absturz manchmal nach 21 Minuten, manchmal nach 
31 Minuten oder nach über einer Stunde passiert.

Ein Stack-Überlauf könnte zwar durch sowas eine rekursive Funktion 
passieren, aber merkt der C-Spy das denn nicht?
Die Möglichkeit den Ablauf umzukehren bis zur letzten Stelle, bei der es 
noch kein Problem gab, hat C-Spy ja leider nicht und Debugen mit 
Ausgaben in Log-Dateien, so wie bei PC-Programmen  üblich, geht ja 
leider nicht (weil der Flash-Speicher fast voll ist).

von Rolf Freitag (Gast)


Lesenswert?

Also nach dem Disabeln vom ADC12 läuft es anscheinend stabil.
Aber eigentlich kann das doch nicht sein, wenn am Ende von

interrupt[ADC_VECTOR] void adc12 (void)

immer mit

ADC12IFG = 0;
gecleart wird, oder?

Auf Dauer kann ich das Disabeln auch nicht lassen, denn ich brauche den 
ADC12 auch um u. a. die OnChip-Temperatur zu messen.

von Rolf Freitag (Gast)


Lesenswert?

Also nun habe ich das Programm mit aktiviertem ADC12, wobei das 
jeweilige ADC12MEMx ausgelesen wird, und es funktioniert stabil!
Es ist also definitiv ein Bug vom IAR-Compiler, denn nach dem User's 
Guide wird durch das Auslesen eines ADC12MEMx nur das betreffende 
Interrupt-Flag gelöscht, aber das wurde auch schon bisher mit

ADC12IFG = 0;
erreicht (mit ADC12TOVIE und ADC12OVIE immer auf 0).

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.