软件和硬件中断之间的区别

时间:2017-11-15 13:21:20

标签: c embedded embedded-linux interrupt-handling interrupted-exception

我最近开始研究ARM Cortex微控制器。在通过Internet阅读不同的文章时,我通​​常会发现2个常见术语,如软件中断和硬件中断。 这两者的实际差异是什么?你能用一个例子解释一下吗?

4 个答案:

答案 0 :(得分:6)

我认为你正在试图弄清楚什么是软件中断以及如何使用它们而不是差异。

让我们从软件和硬件中断的常见开始:它们都用于从主执行上下文切换到低级中断处理程序,以便执行一些低级操作 - 主要是在外设寄存器上。

硬件中断此开关的目的是硬件想要将一些数据传递给程序(GPIO切换,新字符在UART到达等)。这很容易理解,因为在编写程序时,您需要做的就是实现处理程序 - 只要HW需要您的操作,就会调用处理程序。

软件中断此开关的目的是程序想要将一些数据传递给硬件。更具体地说,它想要访问一些无法从当前上下文访问的资源。它适用于通用设计,我们不希望高级应用程序弄乱硬件,例如:直接写入闪存或更改USB控制寄存器,因此我们将其从上层阻止并将此任务委派给OS核心(如Linux内核)。核心通过来自上层的软件中断接收请求,执行一些与HW相关的操作并返回响应。 软件中断也可用于触发OS维护任务 - 例如当前在互斥锁上执行任务块时的上下文切换。

这很难理解,因为与HW中断相反,程序员必须实现 - 处理程序和调用者。

当然,我的解释是一个很大的简化,但我希望它能帮助你理解一般的想法。如果您没有实现操作系统或非常复杂的裸机应用程序,您可能根本不需要它。而且您应该避免在使用操作系统时修改与软件中断相关的代码,因为系统可能依赖它们。

祝你好运!

答案 1 :(得分:3)

硬件中断由物理信号生成,或者来自微控制器本身(例如,作为总线控制器的一部分),或者来自配置为中断的外部GPIO。这些中断通常与微控制器外部的硬件的交互有关,例如,总线上发生事件时产生的SPI或I2C总线中断。这些硬件中断通常通过指定硬件行为的控制寄存器和中断屏蔽的组合进行配置,允许在任何时间点启用或禁用某些中断。内部硬件事件(如电源事件,定时器等)也会触发中断。

软件中断由微控制器执行的指令生成。例如,在x86平台上,您可以使用INT3指令来引发TRAP中断以进行调试。软件中断通常用作切换权限级别的方法,例如,使用系统调用,因为以低特权模式运行的代码可以触发以高特权模式执行的中断,然后可以适当地调度系统调用请求。

在这两种情况下,通常使用中断向量表配置中断处理程序。中断向量只是指向处理每个中断的函数的指针。该表通常存在于微控制器的闪存或ROM空间中的固定存储器位置,但在许多情况下,中断表位置可以配置为编程过程的一部分。通常,每个中断类型都有一个与中断表中的索引相对应的数字,因此您知道将每个处理程序的向量放在何处。

答案 2 :(得分:2)

它们都是中断,它只与源有关。还有一些由指令或故障等产生的中断(这些也是信号)(未定义,未对齐等)。还有一些可供芯片供应商使用。 ARM使IP不是芯片,芯片供应商提供了许多中断,他们可以根据自己的意愿选择使用。它们通常与usb,gpio,uart,spi等外围设备相关联。

ARM有一个名为swi软件的中断或svc。和x86中的软中断数一样,例如,应用程序可以进行服务调用。在全尺寸的臂上,这可以在较低/最高执行级别执行,但由更高权限的模式或执行级别提供服务。基本上允许你拥有一个操作系统。可以在cortex-m上使用此功能,但没有保护层,它提供了一个通用接口,例如当你下载了一个rtos并想为它编写应用程序时,rtos是通用的,应用程序是你自己做的你想要或需要完成,并可以使用此接口调用rtos(由rtos定义)。无论是arm还是x86,调用都是随意的,逻辑并没有规定,软件规定,传统上x86有特定中断的bios处理程序,但这是任意的,你可以编写自己的bios / handler与传统不兼容它会工作只要双方都同意接口,同样swi / svc调用arm不一定是标准,linux可能只有一个,但是如果他们不想这样,freertos就不必遵守它。

皮质-m的另一个不同之处,但不一定是通用差异也不是必需的,是所谓的外部中断,它们在核心外部,但通常与芯片供应商提供的项目有关,有或可能有一个额外的屏蔽层,所以你可以使用中断控制器禁用它们,其中事件类型中断如undefined,systick等,虽然只是信号不通过屏蔽层。并非普遍适用于所有供应商的所有架构(arm,intel,mips等),但如果我记得在cortex-m的情况下,这就是他们实现它的方式。授予那里继续出现新的核心,他们没有任何理由以同样的方式设计所有核心。

答案 3 :(得分:0)

硬件中断是由诸如音效芯片之类的硬件触发的,而软件中断是由软件触发的,因为它是程序指令