我最近开始研究 ARM Cortex 微 Controller 。在互联网上阅读不同的文章时,我通常会发现两个常用术语,即软件中断和硬件中断。
两者的实际区别是什么?你能举个例子解释一下吗?
最佳答案
我认为您正在尝试弄清楚需要什么软件中断以及如何使用它们而不是区别。
让我们从软件和硬件中断的共同点开始:它们都用于从主执行上下文切换到低级中断处理程序,以执行一些低级操作 - 主要是在外围寄存器上。
此开关的用途为 硬件中断 是硬件 想要将一些数据传递给 程序 (GPIO 切换,UART 上的新字符到达,等等)。这很容易理解,因为当您编写程序时,您需要做的就是实现处理程序——只要硬件需要您的操作,就会调用处理程序。
此开关的用途为 软件中断是程序想要将一些数据传递给 硬件 .更具体地说,它想要访问一些无法从当前上下文访问的资源。它适用于通用设计,我们不希望高级应用程序与硬件混淆,例如直接写入闪存或更改 USB 控制寄存器,因此我们从上层阻止它并将此任务委托(delegate)给 OS 内核(如 linux 内核)。内核通过软件中断从上层接收请求,执行一些与硬件相关的操作并返回响应。
软件中断也可用于触发操作系统维护任务 - 例如当前在互斥体上执行任务 block 时的上下文切换。
这更难理解,因为与硬件中断相反,程序员必须同时实现处理程序和调用程序。
当然我的解释是一个很大的简化,但我希望它可以帮助你理解大体的想法。如果你没有实现你的操作系统或非常复杂的裸机应用程序,你可能根本不需要这个。并且您应该避免在使用操作系统时修改与软件中断相关的代码,因为系统可能会依赖它们。
祝你好运!
关于c - 软件和硬件中断的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47308496/