• 处理一件事可以有两种方式:查询、中断
      • 查询方式不断的查看是否可以了,比较费时
      • 中断方式在事件可以时进行打断操作,从而去处理事件
      • image.png
    • 中断方式需要有中断服务程序,指示被中断后如何进行处理
    • 那么中断服务程序如何被调用呢?(这是中断与异常体系的核心)
    • 对于不同中断/异常情况有不同的处理方式(优先级、屏蔽等)
      • image.png
      • image.png
      • 中断是异常的一种,中断体系实际上是异常体系
    • ARM对中断/异常的处理过程
      • image.png

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