第17章 异常与中断的概念及处理流程
17.1 中断的引入
17.1.1 妈妈怎么知道孩子醒了

图 17.1 妈妈和孩子
妈妈怎么知道卧室里小孩醒了?
- 查询方式:时不时进房间看一下
简单,但是累
- 休眠-唤醒:进去房间陪小孩一起睡觉,小孩醒了会吵醒她
不累,但是妈妈干不了活了
- poll方式:妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟
要浪费点时间,但是可以继续干活。
妈妈要么是被小孩吵醒,要么是被闹钟吵醒。
- 异步通知:妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈
妈妈、小孩互不耽误。
后面的3种方式, 都需要“小孩来中断妈妈”:中断她的睡眠、中断她的工作。实际上,能“中断”妈妈的事情可多了:
- 发生了各种声音
- 可忽略的远处猫叫
- 快递员按门铃
- 卧室中小孩哭了
妈妈当前正在看书,被这些事件“中断”后她会怎么做?流程如下:
- 先在书中放入书签,合上书
- 去处理,对于不同的情况,处理方法不同:
-
- 对于门铃:开门取快递
- 对于哭声:照顾小孩
-
- 回来继续看书
17.1.2 嵌入系统中也有类似的情况

图 17.2 中断与异常
CPU在运行的过程中,也会被各种“异常”打断。这些“异常”有:
- 指令未定义
- 指令、数据访问有问题
- SWI(软中断)
- 快中断
- 中断
中断也属于一种“异常”,导致中断发生的情况有很多,比如:
- 按键
- 定时器
- ADC转换完成
- UART发送完数据、收到数据
- 等等
这些众多的“中断源”,汇集到“中断控制器”,由“中断控制器”选择优先级最高的中断并通知CPU。