LPC 935: kurioser Stack

OP #3374863
Lesenswert?

Hallo,

ich habe Code für einen LPC935 der manchmal abstürzt. Um den Fehler zu 
finden hab ich u.a. den Stack-Verbrauch angesehen. Dazu hab ich im 
IDATA-RAM von oben (0FFh) nach unten durchsucht bis das erste Byte 
ungleich 0h kommt.

Dabei ist mir aufgefallen das es Stack-Bytes gibt die bereits verwendet 
werden, also ungleich 0h sind, und dann wieder gelöscht werden. Gibts 
dafür eine Erklärung, oder ist das ein Hinweis auf Code der den Stack 
löscht/überschreibt?

Bin gespannt was ihr dazu meint.

Danke, Gustl
Gast #3374871
Lesenswert?

Lokale Variablen in einer Funktion werden auf dem Stack alloziiert. Wenn 
die Funktion endet, wird der Stackpointer wieder auf den alten Wert 
zurückgesetzt, der Stack aber nicht mit Nullen überschrieben. Wenn du 
eine andere Funktion aufrufst, wird die die Daten eh wieder 
überschreiben.
OP #3374916
Lesenswert?

Ich nutze keine dynamische Speicherverwaltung.
Ich glaube nicht das der Stack die Daten überschreibt. Er hat genügend 
Platz und es ist noch Reserve nach oben. Ich befürchte das es 
andersherum ist, das der Stack überschrieben wird und deshalb die 
Return-Adresse nicht mehr stimmt.
#3374934
Lesenswert?

Gustl B. schrieb:
> Ich glaube nicht das der Stack die Daten überschreibt. Er hat genügend
> Platz und es ist noch Reserve nach oben. Ich befürchte das es
> andersherum ist, das der Stack überschrieben wird und deshalb die
> Return-Adresse nicht mehr stimmt.

Das ist doch letzten Endes dasselbe. Die beiden Speicherbereiche 
kollidieren. Ob jetzt eine Stackoperation dir Variablen zerschiesst oder 
eine Zuweisung dir den Stack zerschiesst ist im Endeffekt nur eine Frage 
der konkreten Reihenfolge der Operationen. Aber die Ursache ist 
dieselbe.

Wenn das das Problem ist.

Was meinst du mit 'da ist noch Reserve nach oben'? Der Stack wächst 
normalerweise von oben nach unten. Oder meintest du mit 'Reserve' die 
Größe des STacks, dass die noch größer gemacht werden könnte?

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