Embedded 其中,中断保存当前活动的地址,以便在执行中断处理程序后恢复该活动

Embedded 其中,中断保存当前活动的地址,以便在执行中断处理程序后恢复该活动,embedded,interrupt,Embedded,Interrupt,当中断发生时,处理器通过暂停其当前活动、保存其状态并执行一个称为中断处理程序的函数来响应 问题是处理器将当前文件的地址保存在何处 在执行中断处理程序后恢复它的活动 这取决于您所属的体系结构。但通常处理器本身会在中断时刻将当前程序计数器推入当前堆栈。然后,中断的返回将获取这些堆叠的PC信息,并返回到正常的程序流。例如,将PC推向堆栈的架构:Atmel AVR、ARM Cortex-M、PowerPC Atmel AVR: 臂皮质-M:严重依赖于结构。 我想到了几种方法(我相信还有更多): 将基本

当中断发生时,处理器通过暂停其当前活动、保存其状态并执行一个称为中断处理程序的函数来响应

问题是处理器将当前文件的地址保存在何处 在执行中断处理程序后恢复它的活动


这取决于您所属的体系结构。但通常处理器本身会在中断时刻将当前程序计数器推入当前堆栈。然后,中断的返回将获取这些堆叠的PC信息,并返回到正常的程序流。例如,将PC推向堆栈的架构:Atmel AVR、ARM Cortex-M、PowerPC

Atmel AVR:


臂皮质-M:

严重依赖于结构。 我想到了几种方法(我相信还有更多):

  • 将基本寄存器推入当前堆栈(例如:指令指针),然后跳转到异常处理程序。然后,异常处理程序负责保存它需要使用的任何其他寄存器。我相信这就是x86 CPU所采用的方法。我只是不确定它是默认推送所有寄存器,还是基本寄存器
  • CPU具有不同的寄存器集,具体取决于CPU模式。(例如:用户模式、中断模式)。本质上,当中断发生时,它开始使用不同的寄存器集。例如,ARM CPU可以做到这一点,尽管它们不使用每个CPU模式的完整寄存器集。看
  • 一些古老的CPU在RAM中有寄存器集,所以切换上下文只是改变寄存器集在内存中的位置。看见如果RAM比CPU本身慢得多,这种方法是不可行的。但对于模拟计算机来说仍然是可行的。例如,我的业余爱好项目(一台完全模拟的计算机)使用这种方法。内核为每个应用程序设置不同的寄存器集。。虽然我可能会在某个时候换一个不同的解决方案

通常是一个堆栈,但这取决于您所谈论的体系结构。“RAM比CPU本身慢得多”-这对于小型低功耗MCU来说是胡说八道。@Olaf是的,我忘记了一个例子。谢谢:)你知道有没有现代的低功耗CPU可以做到这一点吗?有更多的版本可以做到这一点。这个问题太宽泛了,不能在这里讨论!“知道有任何现代低功耗CPU能做到这一点”-是的!“现代”是一个毫无意义的标准。还有大量的8051衍生物。总的来说,它们可能仍然是售出单位的大多数。