Abstürze und Debuger zeigt fast nichts

Gast #23465
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?
Gast #23469
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).
Gast #23470
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.
Gast #23471
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).

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