电子说
在一段时间里,我都认为中断与异常没有很明显的区别,因为表现出来都是当前运行中的程序被打断,然后执行中断向量表中的函数,但是其实这两个还是有区别的。
中断和异常分别属于CPU的外因和内因。例如CAN接收中断、GPIO边沿触发中断都属于中断范畴;而算数溢出、访问地址越界、除0等导致的则属于异常。
举一个例子来解释,当你在家玩游戏时,如果此时快递小哥敲门,你就需要暂停手头的游戏签收一下快递,这个时候的快递小哥就属于是中断,是属于外因打断了你玩游戏;当你继续玩游戏时,突然你肚子很痛要上厕所,则此时暂停玩游戏就属于是异常,是属于自身身体出问题的内因打断自己玩游戏。
中断的引入 ——为了支持CPU与设备之间的并行操作
◆当CPU启动外设进行输入/输出后,外设便可以独立工作,CPU转去处理其他与此次输入/输出不相关的事宜;当外设完成输入/输出后,通过向CPU发送中断报告此次输入/输出的结果,让CPU决定如何处理后续事宜。
异常的引入 ———表示CPU执行指令时本身出现了问题
◆如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了“陷入指令”等,这时硬件改变了CPU当前的运行流程,转到相应的错误处理程序或异常处理程序或执行系统调用
在Cortex-M内核中,有三个中断屏蔽寄存器,分别是PRIMASK、FAULTMASK、BASEEPRI。如下表所示,通过配置这三个寄存器,可实现对中断、异常的管理。
为了控制中断与异常,Cortex-M内核专门设定了CPS指令,有如下四种用法:
CPSID I ;PRIMASK = 1 ;关中断
CPSIE I ;PRIMASK = 0 ;开中断
CPSID F ;FAULTMASK = 1 ;关异常
CPSIE F ;FAULTMASK = 0 ;开异常
I为Interrupt(中断)、F为Fault(异常)
全部0条评论
快来发表一下你的评论吧 !