Forum: Mikrocontroller und Digitale Elektronik Stack overflow?


von Daniel (Gast)


Lesenswert?

ich verwende einen C167. Funktioniert soweit. Nur nach einer gewissen 
Zeit kommt mir immer ein Stack overflow (gehe zumindest so aus, da der 
entsprechende interrupt ausgelöst wird).
Hab mal verschiedene Stack-grössen ausprobiert (64,129,256 ud 512kb), 
reagiert zumindest von gefühl her genau gleich...

Bin nun hingegangen, und sende mir den wert des SP andauernd über die 
serielle schnittstelle auf den PC. Wenn ich mir die Werte anschaue, 
schauts für mich eigentlich ok aus.
vor dem Stack overflow bewegen sich die Werte des SP zwischen FBC6 und 
FBCA(STKUN = FC00, STKOV = FA0C). Dann scheint auf einmal alles etwa 2 
Sekunden still zu stehen, und dann fängt die LED (welche bei einem 
Stackoverflow blinken soll) an zu blinken. Der SP liegt dann bei FB9C.

Nun hab keinen blassen was in den 2 sekunden dazwischen passieren 
soll... ne idee wie ich dies rausfinden könnte????? hatte jemand 
ähnliche probleme? weiss momentan nicht so recht wie ich weiter vorgehen 
soll (viritueller stack?), ideen/anregungen?

von Philipp B. (philipp_burch)


Lesenswert?

Irgendwo eine Rekursion ohne Abbruchbedingung eingebaut? Hast für den 
Controller einen Simulator oder hat er JTAG?

von Florian M. (flomll)


Lesenswert?

Ich habe ein änliches Problem! Ich schreibe Daten auf ein Display über 
das SPI und verwende eine TIMER ISR. Diese TIMER ISR wird derzeit nur 
verwendet um zu einem bestimmten Zeitpunkt das BACK_LIGHT zu aktivieren. 
(nur zu Testzwecken) Nachdem er die ISR verlässt arbeitet das AVRS für 
2-3 Sekunden und im Anschluss startet das Programm neu!!! Habe auch noch 
keine Idee. Es kann fast nur an einem StackOverflow liegen! Wie kann man 
denn die Stackgrößer verändern?

Habe mir auch den Assembler schon angeschaut und die ISR scheint mir 
richtig zu sein! Es werden alle Register auf den Stack geladen und nach 
der ISR wieder mit reti zurück gesprungen. Jedoch kommt er nirgends an!

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.