学习交流加微信
- 我的qq: 1126137994
- 我的微信: liu1126137994
- 学习交流资源分享qq群: 962535112
本篇文章咱们学习中断的概念与意义。本片文章只学习中断概念与意义,并不深刻研究中断向量表与ISR中断服务程序的实现。同时本片文章讲解一个与中断有关的应用:断点调试。固然具体的断点调试方法会在后面讲解,本次只是说明中断在断点调试中的应用。函数
上面只是中断的简单概念。举个例子,咱们点击鼠标的时候,鼠标这个外设会产生一个中断,当CPU收到这个中断的时候,CPU会响应这个中断,进而执行ISR(中断服务程序),在中断服务程序中确定会调用鼠标的驱动模块,从而在电脑上咱们才能看到鼠标的点击效果。工具
那么什么是中断服务程序呢(ISR)?学习
下面看一个图示来表示一个中断产生的过程: 设计
那么,从程序的角度来考虑,中断服务程序(ISR)有哪些特征呢?调试
咱们知道,中断服务程序执行完以后,须要再次回到以前的程序继续执行,因此ISR不能有返回值(想想你有返回值获得话,谁来接收这个返回值呢?),而且,没有参数传递!由于前期已经通断中断向量表来选取了特定类型的处理逻辑,此处无需再让中断的类型当作参数传递来决定如何设计处理逻辑,因此无需参数。同时,对于这种打断程序运行的,好比后面的信号,程序最好不要太长,容易产生错误。因此ISR最好短小精悍,为了可以快速结束,最好少作浮点运算。cdn
硬中断blog
软中断事件
好比此时有好几个中断信号产生,好比你的电脑正在运行微博程序,你点击鼠标,立马有反应,这说明什么?说明鼠标的优先级比微博程序的优先级高。其实,任何ISR的优先级,都比应用程序的优先级高。而中断中,也分为不一样的优先级,高优先级的中断会优先获得CPU的处理,且一个中断ISR在运行时,若是再来一个比它优先级高的中断,这个高优先级的中断会打断那个正在执行的中断程序。图片
中断优先级
你们都知道断点调试。程序的断点,其实就是一个指令的地址。这个指令的地址,是调试工具(例如GDB)让代码中止执行时候的位置。当你设置断点后,程序会在你设置的断点处中止执行。而后去执行你的调试工具里面的相应程序,那么接下来你就可使用调试工具来获取程序的相应信息,好比上下文环境,栈信息等
程序断点的实现原理,依赖于CPU的中断机制。包括CPU的硬中断机制与软中断机制。
说的通俗一点,就是将断点处的指令替换为中断触发指令,再也不继续执行当前程序,而是去执行中断服务程序ISR,而后ISR再将CPU控制权交给你的调试工具的处理程序。
程序断点的实现原理
下面来看一张图理解断点的实现原理
其中中断触发指令,被CPU执行后,OS会向调试程序发送signal,signal后面会讲。调试程序收到signal,会执行响应的处理函数handle。
以上只是大体讲原理,没有深刻研究源码。
本篇文章要学会: