moinsen, ich sitz grad vor IAR und kuck blöd aus der wäsche: Ich habe ein Unterprogramm, welches ich aus einem Sensor ins RAM des 1611 kopiere und dann ausführe. von dort aus rufe ich per "call &0x4010" ein Unterprogramm im Flash auf (habe über eine Tabelle an dieser adresse stehen, wo das UP liegt). Das funktioniert auch wunderbar, und das UP löppt. ABER: nun kommt am ende des UPs RET, und die kiste springt eben nicht an die Adresse, auf die der SP zeigt, sondern unnachvollziehbar an 0x0000 seltsamerweise wird dabei aber der wert der auf dem stack steht um 6 erhöht. Hat irgendjemand den effekt schon mal beobachtet?
zur Ergänzung: das Programm liegt im RAM im bereich 0x2d00 (und folgende)
Der SP zeigt nicht auf die Ret-Adresse sondern auf Speicher in der diese steht. Aber das klingt so, als ob der SP in den Wald zeigt.
hab mal kurzerhand 4 screenshots gemacht: einer vor dem Aufruf des UPs aus dem Ram, einer direkt danach, einer vor dem RET (bei mir steht testweise mov @SP+, PC , aber das macht ja genau das gleich (und produziert auch den gleichen fehler...die ruitine wird übrigens vorher schon einige male fehlerfrei aufgerufen...fehler passiert nur bei nem programmaufruf aus dem RAM)
Hat sich erledigt. das ganze war ein debugfehler: IAR (und alle anderen debuger) kann logischerweise keine debuginformationen in code einfügern, der von woanders kommt. Daher wird der code im ram zwar ausgeführt, die ausführung aber nich angezeigt. In meinem Fall war nich der RET das Problem, sondern die Adresse des folgenden Calls. da hab ich mich vertippt, und er is wie gewünscht an die Adresse 0x0000 gesprungen.
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.