Forum: Mikrocontroller und Digitale Elektronik Stack overflow der keiner ist....


von Daniel (Gast)


Lesenswert?

verwende einen C167 als compiler keil. Mein problem ist, dass ich 
scheinbar immer einen stack overflow hab...
mit traps.c (file von keil, welches u.a. bei einem stack overflow einen 
interrupt auslöst) hab ich überprüft ob wirklich ein stack overflow 
vorliegt.  Dies, indem ich, soblad ich in diesen interrupt kommmen, die 
werte des SP, STKOV und STKUN über die serielle schnittstelle an den PC 
sende. Dabei stelle ich jeweils fest, dass der Stackpointer wie er soll 
irgendwo zwischen STKOV und STKUN liegt... Wie kann das sein? meine ein 
stack overflow liegt vor, wenn der SP unterhalb von STKOV liegt. dies 
ist aber nicht der fall... wie kann es daher sein, dass mit der 
entsprechende interrupt dauernd ausgelöst wird?????

mfg
Daniel

von Daniel (Gast)


Lesenswert?

ergänzung: der SP liegt effektiv etwa in der mitte zwischen STKOV und 
STKUN er ist also noch weit von STKOV entfernt...

von Ralph (Gast)


Lesenswert?

Schreib bei der Initialisierung des µC den kompletten Stackbereich mit 
einem Muster voll; zb 0xAA.

Einene Stackoverflow kannst du dann daran erkennen wenn das Muster in 
den letzten Stackadressen überschrieben ist.

Du könntest aber auch einen Stackunderflow haben.

Gruß
Ralph

von Daniel (Gast)


Lesenswert?

hallo ralph,
gute idee, hab ich mal gemacht, und es ist so rausgekommen wie ich 
aufgrund anderer versuche erwartat habe, grosse teile des stacks sind 
trotz stack-overflow trap noch mit dem wert 0xAAAA beschrieben...

>>Du könntest aber auch einen Stackunderflow haben.
naja dann würde ein anderer Trap ausgelöst, ich würde es also merken... 
oder überseh ich was?

woran könnte das ganze liegen? Wie weiter?

von Daniel (Gast)


Lesenswert?

niemand ne idee?

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.