Exception 维护中断与维护异常

Exception 维护中断与维护异常,exception,exception-handling,embedded,interrupt,interrupt-handling,Exception,Exception Handling,Embedded,Interrupt,Interrupt Handling,我的理解是:中断(硬件中断)是异步发生的,通常是由直接中断CPU的外部事件引起的。然后,CPU将向特定的ISR发送向量,以处理中断。 显然,ISR不能有返回值或传递参数,因为事件在代码中的任何执行点随时发生 但是,除例外情况外,我的理解是,这是一种软件中断,由软件中的特殊指令pd引起 我听说处理异常的方式与处理ISR类似。在这种情况下,异常处理程序是否可以通过从代码中获取参数并返回一个值来表现出与ISR不同的行为,因为我们知道在执行代码时我们在代码中的位置 提前感谢术语“例外”可能意味着完全不同

我的理解是:中断(硬件中断)是异步发生的,通常是由直接中断CPU的外部事件引起的。然后,CPU将向特定的ISR发送向量,以处理中断。 显然,ISR不能有返回值或传递参数,因为事件在代码中的任何执行点随时发生

但是,除例外情况外,我的理解是,这是一种软件中断,由软件中的特殊指令pd引起

我听说处理异常的方式与处理ISR类似。在这种情况下,异常处理程序是否可以通过从代码中获取参数并返回一个值来表现出与ISR不同的行为,因为我们知道在执行代码时我们在代码中的位置

提前感谢

术语“例外”可能意味着完全不同的事情

有异常处理形式的“软件异常”,作为C++语言中的高级语言特征。此上下文中的“异常处理程序”类似于

try{}catch

还有“硬件异常”,这是一些CPU核心(如PowerPC)使用的术语。这些是与错误状态相对应的临界中断的一种形式。在此上下文中的“异常处理程序”类似于中断向量表,尽管当硬件异常发生时,软件通常对此无能为力

硬件异常不接受参数,也不返回数据,就像中断一样。像PowerPC这样的体系结构将硬件异常与硬件中断分开,前者是各种错误状态,后者是来自特定于应用程序的硬件的中断

硬件异常与软件通信并没有多大意义,因为它们是由执行错误的操作码、CPU时钟变差、失控代码等关键故障产生的,执行环境已被破坏,因此在该环境中执行的软件无法执行任何有意义的操作。

术语“异常”可能意味着完全不同的事情

有异常处理形式的“软件异常”,作为C++语言中的高级语言特征。此上下文中的“异常处理程序”类似于

try{}catch

还有“硬件异常”,这是一些CPU核心(如PowerPC)使用的术语。这些是与错误状态相对应的临界中断的一种形式。在此上下文中的“异常处理程序”类似于中断向量表,尽管当硬件异常发生时,软件通常对此无能为力

硬件异常不接受参数,也不返回数据,就像中断一样。像PowerPC这样的体系结构将硬件异常与硬件中断分开,前者是各种错误状态,后者是来自特定于应用程序的硬件的中断

硬件异常与软件通信并没有多大意义,因为它们是由执行错误的操作码、CPU时钟变差、失控代码等关键故障产生的,执行环境已被破坏,因此在该环境中执行的软件无法执行任何有意义的操作。

硬件异常不是软件中断,您不能显式调用它-它发生在某些硬件可检测错误上,例如:

  • 无效地址
  • 无效指令
  • 无效对齐
  • 除零
当然,您可以编写代码来故意引起这些错误,并因此将它们用作软件中断,但随后您可能会失去它们作为真正错误陷阱的实用性。例外情况在某些情况下用于此目的-例如,在架构上没有FPU的处理器中,如果和FPU是一个选项,则可以使用无效指令处理程序来实现FPU的软件仿真,以便编译器不需要为FPU和非FPU变体生成不同的代码。类似地,无效地址异常可以调用内存管理器来实现虚拟内存交换文件(在具有MMU的设备上)

软件中断由SWI指令显式调用。与直接的函数调用相比,它的好处是应用程序不需要知道处理程序的位置,处理程序的位置由向量表确定,通常用于在简单操作系统中进行操作系统或BIOS调用,可以动态加载代码,但不支持动态链接(例如MS-DOS就是这样工作的)

硬件中断、软件中断和异常的共同点是,它们在不同的处理器上下文中执行,而普通代码通常会切换到独立堆栈并自动推送寄存器(或使用备用寄存器组)。它们都通过向量表进行操作,您不能通过正式函数参数传递和返回来传递或返回参数。对于SWI和强制异常,可以将值加载到处理器已知的特定寄存器或内存位置

以上是一般原则-不同体系结构的具体细节会有所不同。请参阅所用特定设备的技术参考。

硬件异常不是软件中断,您不能明确地调用它-它发生在某些硬件可检测错误上,例如:

  • 无效地址
  • 无效指令
  • 无效对齐
  • 除零
当然,您可以编写代码故意引起这些问题,并因此将它们用作软件中断,但随后您可能会失去它们作为真正错误陷阱的实用程序。在某些情况下,例外情况用于此目的-用于检查