PIC32获取/设置程序计数器

时间:2018-07-20 10:51:50

标签: context-switch pic32

首先,我做了一些研究:

我希望能够获取并设置MCU程序计数器。我正在研究一些内核代码,并希望实现基本的上下文切换,以便在其中存储密钥寄存器和PC,以便稍后进行恢复。

我正在uC32开发板上使用PIC32MX340F512器件(忽略该事实是​​针对Aurduino的。)

我可以获取EPC(异常程序计数器)值,但是它仅存储最后一个异常的PC值。但是您可以对其进行写操作,然后调用eret asm指令将PC跳转到其位置。如果我可以在代码中感兴趣的位置创建一个伪造的异常,那么我可能可以获取该值?似乎有点黑。

我已经看到一些人通过PCL和PCH寄存器写入PC的示例,但是这些似乎没有在我的MPLAB工作区(XC编译器)中定义。

有什么想法吗?我已经包括了TNKernel的要点,该要点为PIC32器件进行了上下文切换,但是它是汇编语言,很不幸我并不理解。但它看起来确实像是在ISR中完成的,这是有道理的。当我们跳入ISR时,无论如何都必须进行上下文切换。

1 个答案:

答案 0 :(得分:0)

仅当cpu处于内核模式时,才可以更改EPC寄存器的值。最简单的方法是在程序集中实现ISR,因为中断是在内核模式下处理的。您可以创建一个简单的ISR函数,并从MPLABX的反汇编窗口中获取用于处理中断的汇编代码,并且在执行eret函数之前,可以将新值设置为EPC寄存器。当eret返回EPC寄存器中的地址时,所有cpu寄存器将在进入ISR之前恢复为以前的值,因此您应该在从ISR返回之前备份$ ra和$ epc寄存器,并使用其他功能进行其余操作,其地址在EPC寄存器中。