Die Suche nach dem Stackfehler im Heuhaufen

Gast #51969
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.
Gast #51970
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
Gast #51971
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
Gast #51972
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
Gast #51973
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.