Gast
#1131438
In meiner Anwendung wird ein Unterprogramm mit RJMP aufgerufen und am
Ende wieder mit ret verlassen - die notwendigen register werden jeweils
mit push und pop gesichert/zurückgeschrieben.
Für eine Fehlerbehandlung muss ich nun aus dem Unterprogramm
hinausspringen und am ende der Fehlerbehandlung soll das Unterprogramm
wieder von vorne ausgeführt werden.
...
rjmp Unterprogramm
...
Unterprogramm:
push register
....
SBRC Fehlervariable, 7
RJMP error
...
pop register
ret
error:
...(was eben nach einem Fehler erledigt werden soll)
Wenn ich in der Fehlerbehandlung (error) nun das für eine erneute
Ausführung des Unterprogramms notwendige
"pop register"
einfüge stimmt doch meine Rücksprungadresse auf dem Stack nicht mehr!?
Wenn ich vom error Teil direkt zum unterprogramm springe habe ich das
register auf dem stack.
wenn ich das Error-unterprogramm wieder mit ret verlasse, macht er dort
weiter, wo er nicht weitermachen soll...
wenn ich im Unterprogramm nach RJMP error folgendes einfüge:
SBRC Fehlervariable, 7
pop register
SBRC Fehlervariable, 7
rjmp Unterprogramm
habe ich doch zweimal die rücksprungadresse zu meinem Unterprogramm und
komme mit meinem ret am ende des Unterprogramms nicht mehr zu meinem
Hauptprogramm zurück.
Wie programmiert man dieses Konstrukt sauber?
Viele Grüße
Manuel