在嵌入式系统中,往往有很多外围设备,而外围设备需要和主机进行交互,往往也需要对特殊事件进行一些处理,而进行这些操作需要一些途径,而中断就是非常好的一种途径。
为什么要有中断?
中断的引入是为了解决一些需要及时响应,但不需要占用太多时间的问题。举个例子,我们在吃饭或者说休息的时候,你一个朋友给你打了电话,他打的电话就是需要即使响应的,正常情况都会去接电话,处理完之后你还是继续休息,你去接电话的过程就是一个中断处理流程。电话铃声在嵌入式系统中就叫中断信号,你可以选择接电话,也可以选择忽略电话,在嵌入式系统中我们有时候也会忽略中断信号。
中断和轮询的区别:
中断和轮询都能处理一些事件的机制,其最大的不同在于中断是被动接受消息,轮询是每隔一段时间就主动去查找是否有事情发生。举个例子,中断是我们休息的时候别人打电话来,轮询就相当于我们休息期间每隔半小时去看一下qq或者微信有没有人给我们发消息。中断是被动的接收中断信号,而轮询是主动查看有没有事件发生。
在中断和轮询的选择中,如果事件发生的频率是可控的,我们往往采用轮询的方式,如果事件发生的频率不可控,我们采用中断。在嵌入式系统中,轮询和中断往往会一起使用。
外部中断和内部中断:
外部中断就是别人给你中断信号,内部中断就是自己给自己中断信号,上文提到的打电话的例子就是外部中断,内部中断可以理解为你在休息的时候突然想上厕所,想上厕所这个信号是自己给自己的,你会先上厕所然后继续休息。这个过程就是内部中断的处理过程,这种信号就叫内部中断信号。
什么是中断上下文:
我还是用一个例子来解释,假如你正在玩游戏,你的朋友打电话约你晚上去玩儿,你得先暂停游戏然后接电话,这个动作就是中断上文,中断上文对应紧急响应,但这个不一定需要紧急处理,因为你要晚上再去玩儿,你晚上去玩儿的时候这个就对应中断下文。
一个完整的中断包括中断上下文。