Gast
#106003
Hallo! Mein Program beginnt rumzuspinnen sobald ich weiteren - beliebigen- Code hinzufüge. Es kommt reproduzierbar an bestimmten Stellen im Programmablauf zum Reset. Zunächst standen fehlerhafte push/pop oder rjmp/rcall/ret im Verdacht einen Stacküberlauf auszulösen. Ich konnte jedoch keinen diesbezüglichen Fehler finden. Außerdem war komisch das es bereits auftrat wenn man nur ein nop an beliebiger Stelle einfügte. Nach einigen Probieren vermute ich jetzt das auf Grund der Codegröße die Sprungweite des rjmp / rcall nicht mehr ausreicht. ( PC +/- 2k Worte). Leider gibt es scheinbar im Gegensatz zu Verzweigungen ( Branch if...) keine Fehlermeldung wenn die Sprungadresse außerhalb des Bereiches liegt. Auf Grund der Unmengen von rjmps und rcalls ist es sehr schwierig rauszubekommen welcher Befehl nun genau die Hänger verursacht. Das Studio kann ich nicht nutzen.. Ich habe - zunächst wahllos- einige rjmps und rcalls durch jmp und call ersetzt, das hat aber das Problem nicht beseitigt. Wie kann ich das Problem beheben? Ist es problemlos möglich alle rjmps und rcalls durch die absoluten Befehle call und jmp zu ersetzen? Ich verwende einen mega32, die Codegröße liegt im Moment bei ca 3200 Worten, es wird aber noch deutlich mehr...