ana*_*u16 2 c embedded interrupt-handling embedded-linux interrupted-exception
我最近开始研究ARM Cortex微控制器.在通过Internet阅读不同的文章时,我通常会发现2个常见术语,如软件中断和硬件中断.这两者的实际差异是什么?你能用一个例子解释一下吗?
小智 6
我认为你正在试图弄清楚什么是软件中断以及如何使用它们而不是差异.
让我们从软件和硬件中断的常见开始:它们都用于从主执行上下文切换到低级中断处理程序,以便执行一些低级操作 - 主要是在外设寄存器上.
此开关用于硬件中断的目的是硬件想要将一些数据传递给程序(GPIO切换,UART上的新字符到达等).这很容易理解,因为在编写程序时,您需要做的就是实现处理程序 - 只要HW需要您的操作,就会调用处理程序.
此开关用于软件中断的目的是程序想要将一些数据传递给硬件.更具体地说,它想要访问一些无法从当前上下文访问的资源.它适用于通用设计,我们不希望高级应用程序弄乱硬件,例如直接写入闪存或更改USB控制寄存器,因此我们将其从上层阻止并将此任务委派给OS核心(如linux内核).核心通过来自上层的软件中断接收请求,执行一些与HW相关的操作并返回响应.软件中断也可用于触发OS维护任务 - 例如当前在互斥锁上执行任务块时的上下文切换.
它更难理解,因为与HW中断相反,程序员必须实现 - 处理程序和调用者.
当然,我的解释是一个很大的简化,但我希望它能帮助你理解一般的想法.如果您没有实现操作系统或非常复杂的裸机应用程序,您可能根本不需要它.而且您应该避免在使用OS时修改与软件中断相关的代码,因为系统可能依赖它们.
祝好运!