Я пытаюсь сохранить контекст регистров и сохранить указатель стека на переменную C из Assembly, она работает, но выдает много ошибок и вылетает, когда попадает в оператор 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: перехват из-за нереализованного доступа к памяти FLASH, произошедшего из инструкции в 0xXXXXXX" ошибки
Я думаю, что это может иметь какое-то отношение к тому, как я обращаюсь к указателю стека (W15).
У кого-нибудь есть совет?Спасибо