Во-первых, я провел небольшое исследование:
- Getting EPC
- On PIC18Fxxx
- Compile time only
- TNKernel ports.h, showing inline asm context switching
Я хочу иметь возможность получить и установить программный счетчик MCU. Я играю с некоторым кодом ядра и хочу реализовать базовое переключение контекста, где я храню ключевые регистры и ПК, которые будут восстановлены позже.
Я использую устройство PIC32MX340F512 на плате разработчика uC32 (игнорируйте тот факт, что он предназначен для Aurduino).
Я могу получить значение EPC (счетчик программы исключений), но он сохраняет только значение PC из последнего исключения. Но вы можете написать в него и вызвать eret
инструкцию asm, чтобы перейти на ПК к его местоположению. Если я смогу создать поддельное исключение в интересующей позиции кода, я, вероятно, смогу тогда получить значение? Кажется хакерским.
Я видел примеры, когда люди писали на ПК через регистры PCL и PCH, но они, похоже, не определены в моем рабочем пространстве MPLAB (компилятор XC).
Любые идеи? Я включил суть от TNKernel, которая выполняет переключение контекста для устройства PIC32, но она находится в сборке, и я, к сожалению, ее не понимаю. Но это выглядит так, как будто это сделано в ISR, что имеет смысл. Когда мы переходим в ISR, нам все равно приходится переключать контекст.