中断属于异常的一种
所有的cortex-m处理器都会提供一个用于中断处理的嵌套向量中断控制器(NVIC)。除了中断请求,还有其他需要服务的事件,将其称为异常。按照ARM的说法,中断也是一种异常。
处理异常的程序代码一般被称作异常处理,它们属于以编译程序映像的一部分。典型的cortex-m4微控制器中,NVIC接收多个中断源产生的中断请求,如下图所示:
异常在中断向量表里的的编号
cortex-m处理器的异常架构具有多种特性,支持多个系统异常和外部中断。编号1-15的为系统异常,16及以上的则为中断输入(处理器的输入,不必从封装上的I/O引脚上访问)。包括所有中断在内的多数异常,都具有可编程的优先级,一些系统异常则具有固定的优先级。
狭义的异常和中断
上面已提到了,中断是异常的一种。
有时候大家说的异常,不是指上面那个,是指狭义上的异常。
外中断——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;
内中断——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。
异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。
中断则是由于系统中某事件引起的,该事件与现行指令无关。
不过建议还是按中断属于异常来记忆。