c - 软件和硬件中断的区别

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

我最近开始研究 ARM Cortex 微 Controller 。在互联网上阅读不同的文章时,我通​​常会发现两个常用术语,即软件中断和硬件中断。
两者的实际区别是什么?你能举个例子解释一下吗?

最佳答案

我认为您正在尝试弄清楚需要什么软件中断以及如何使用它们而不是区别。

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

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

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

这更难理解,因为与硬件中断相反,程序员必须同时实现处理程序和调用程序。

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

祝你好运!

关于c - 软件和硬件中断的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47308496/

相关文章:

c - 'strncpy' 与 'sprintf'

objective-c - 为什么 Objective C 对象的 isa 字段与其类指针有 1 个偏移量?

c - 如何用C完成通配符功能?

linux - 如何使用串口与RFID阅读器通信

linux tslib ts_read 不适用于多点触控显示

c - 访问 GPIO AM335x 板作为 RESET 和最小 CPU 使用率

c - 遍历指针到指针

c - 如何在 linux 嵌入式系统 - 非 x86 系统上查找内存泄漏?

Codevision AVR 使用 TWI 访问外部 eeprom 24c02B

linux - 适用于嵌入式 Linux 板的轻量级数据库