Столкнулся недавно с такой проблемой при использовании psv: в прерывании вызывал функцию, которая обращалась к данным в psv. Прерывание было объявлено с атрибутом "auto_psv"
При этом в основном цикле использовались разные PSV-страницы.
В произвольные моменты времени программа улетала в _AddressError.
Проблема решилась принудительной установкой правильной psv страеницы при входе в прерывание:
mov #__const_psvpage, w0
mov w0,_PSVPAG
До этого думал, что если объявлять обработчик прерывания с атрибутом auto_psv,
нужную psv страницу установит компилятор! Или я что-то не правильно понял?!
Компилятор Microchip C30