- 处理一件事可以有两种方式:查询、中断
- 查询方式不断的查看是否可以了,比较费时
- 中断方式在事件可以时进行打断操作,从而去处理事件
- 中断方式需要有中断服务程序,指示被中断后如何进行处理
- 那么中断服务程序如何被调用呢?(这是中断与异常体系的核心)
- 对于不同中断/异常情况有不同的处理方式(优先级、屏蔽等)
- 中断是异常的一种,中断体系实际上是异常体系
- ARM对中断/异常的处理过程
- CPU在处理中断/异常前,需要保存此前正在进行的状态,以便处理完中断/异常后能继续进行
- CPU在每执行完一条指令后都会去查看是否有中断/异常发生(这是硬件层面设计决定的)
- 初始化
- 设置中断源,让它可以产生中断
- 设置中断控制器(可以屏蔽某个中断,优先级)
- 设置CPU总开关,使能中断
- 执行其他程序:正常程序
- 产生中断,举例:按下按键—->中断控制器—->CPU
- cpu每执行完一条指令都会检查有无中断/异常产生
- 发现有中断/异常产生,开始处理:
- 初始化
- 保存现场
- 分辨异常/中断,调用对于异常/中断的处理函数
- 恢复现场
- 不同的芯片,不同的架构,在这方面的处理稍有差别:
- 保存/恢复现场:cortex M3/M4是硬件实现的,cortex A7是软件实现的
- CPU中止当前执行,跳转去执行处理异常的代码:也有差异
- cortex M3/M4在向量表上放置的是函数地址
- cortex A7在向量表上放置的是跳转指令
- cortex M3/M4在向量表上放置的是函数地址
- 保存/恢复现场:cortex M3/M4是硬件实现的,cortex A7是软件实现的
- 跳转执行中断服务程序过程中,对于不同ARM架构,跳转的地址、保存/恢复现场的处理等可能是不一样的
- 中断触发的流程是:中断源触发中断到达中断控制器,中断控制器进行筛选(是否最高优先级、是否被屏蔽),将当前需处理的中断发给CPU