レジスタのコンテキストを保存し、アセンブリからC変数へのスタックポインタを格納しようとしていますが、動作しますが、returnステートメントに到達すると、多くのエラーがスローされ、クラッシュします。
コードは次のとおりです。
_saveContext:
PUSH SR
PUSH W0
MOV #32, W0
MOV W0, SR
PUSH W1
PUSH.D W2
PUSH.D W4
PUSH.D W6
PUSH.D W8
PUSH.D W10
PUSH.D W12
PUSH W14
PUSH RCOUNT
PUSH TBLPAG
PUSH ACCAL
PUSH ACCAH
PUSH ACCAU
PUSH ACCBL
PUSH ACCBH
PUSH ACCBU
PUSH DCOUNT
PUSH DOSTARTL
PUSH DOSTARTH
PUSH DOENDL
PUSH DOENDH
PUSH CORCON
PUSH PSVPAG
MOV W15, W0
MOV W0, _stackPointer //Save to C Var
RETURN
MPLABでコードをシミュレートする場合、C変数にはスタックポインタの値が割り当てられますが、RETURNに達すると、複数のエラーが発生します。
「CORE-E0004:未実装のフラッシュメモリアクセスによるトラップ、0xXXXXXXの命令から発生しました」エラー
スタックポインター(W15)にアクセスする方法と関係があるのではないかと思います。
誰かアドバイスはありますか?ありがとう