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...
Warum kannst du AVR-Studio nicht nutzen? Welchen Assembler verwendest du denn? Normalerweise sollte schon eine Fehlermeldung kommen. Vom 8051-Assembler kenne ich noch das nette Spielchen, dass man einfach jmp schreibt, und der Assembler sich je nach Sprungweite ajmp oder ljmp selbst aussuchte...
AVR Studio erzeugt bei Sprüngen bzw. Unterprogrammaufrufen > +- 2k Worte auch eine Fehlermeldung. Bei älteren Studioversionen kann es jedoch sein, daß die Option Wrap relativ jmp/call ausgwählt ist, was nur sinnvoll bei Controllern mit max. 8k Flash ist. Bei mehr wie 8k führt diese Option zu Fehlern bei der Adressberechnung während der Asssemblierung. Bei der aktuellen Studio Version wird diese Option aber automatisch entsprechend Flash-Grösse gewählt.
Hm, das wrap ist ausgewählt, mache ich also besser mal weg....danke.. AVR Studio nutze ich schon, nur Simulation geht nicht wegen Parameterübergaben von außerhalb, ext. Interrupts usw... ich hab jetzt alle wait Befehle von rcall auf call umgestellt (offensichtlich lagen die weit "außen"), und jetzt geht es erst mal wieder... bis die nächsten Routinen zu weit weg sind... Ich hab Studio 4.07. Und es sollte wirklich Fehlermeldungen kommen? Hm.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.