Forum: Mikrocontroller und Digitale Elektronik Die Suche nach dem Stackfehler im Heuhaufen


von Henning (Gast)


Lesenswert?

ich hoffe nicht alle mit dem wort "Stackfehler" schon in der
betreffzeile abzuschrecken, aber hier steht ja seit neustem
aussagekrüftigen Betreff wählen...

also: mein Problem, mein AVR macht wirre dinge, die nicht zu erklären
sind. (erhöht ein registerpaar um viel zu viel, das ich in dem ganzen
programm nur 3 mal benutze...)
Sicher ist das ein Stackfehler; ich bin in soweit schon beruhigt, das
selbst das AVR Studio meldet "AVR Simulator Stck pointer changed after
subroutine call".

Nur wie finde ich den am einfachsten? ich gehe jetz schon seit fast 2
Stunden das Programm schritt für schritt durch und erwische den Fehler
immer dann, wenn ich eine Routine überspringe... Wie löst ihr einen
solchen Fehler. Das er da ist ist ja so ziemlich nachgewiesen...

vielen dank schonmal für jegliche hinweise! Ich drehe noch ne runde mit
meinem Simulator, vieleich erwische ich den diesesmal.

von edi (Gast)


Lesenswert?

hoi
in die speicherplaetze,die fuer Stack vorgesehen sind schreibst du ein
bitmuster. Lasse den simulator laufen und schaue danach ob und wieviele
stackplaetze ''ueberschrieben '' wurden. Falls deine vermutung
stimmt, dann muessten alle plaetze ueberschrieben worden sein.

versuchs mal
ed

von Henning (Gast)


Lesenswert?

nope, wenn ich das ganze schrittweise durchgehe, dann scheint alles zu
klappen. irgendwann löst dann das avr studio aus und wenn ich dann aber
zurück in meiner (gewollten und programmierten) endlosschleife bin ist
der stack richtig.

warum löst der simulator aus, wenn alles richtig zu sein scheint.

ich werde versuchen, das ganze programm auf das nötige zu minimieren.
dann müsste ich den fehler eingrenzen können?! hoffe mal es klappt.

und danke für die antwort

von Mike (Gast)


Lesenswert?

DEn Fehler: "AVR Simulator Stck pointer changed after
subroutine call" bekommst du auch wenn per Einzelschritt in eine
Routine gehst und sie dann nicht per Einzelschritt verlässt.

Wenn du dir also den Anfang anzeigen läßt, aber dann den Rest der
Routine überspringst um mit einen Befehl nach den Aufruf weiter zu
machen.

Hab ich bei mir auch schon häufiger gehabt, ist aber kein Fehler in
deinem Programm sondern vom Debugger. Must also wohl oder übel noch mal
wo anders nach deinem Käfer suchen

Mike

von Henning (Gast)


Lesenswert?

hmm es ist natürlich immer das blödeste: ich habe per inc einen zähler
ehöht und wollte mit carry den überlauf abfragen -> Zero währe richtig
gewesen. also kein stack fehler

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.