# 中断子系统 ## 概述 请先阅读[中断基础](../02.Linux驱动开发基础/07.Linux中断.md) - Linux嵌入式中断不可嵌套 - 分为硬件中断和软件中断 - 硬件中断 cpu每执行一条指令的时候,就会检查是否有硬件中断发生,当发生硬件中断的时候,根据硬件中断号,跳转到指定地址去执行 ![](media/image-20221205094706968.png) - 保存现场,关中断 - 会跳到指定的地址去执行硬件中断的回调函数,此时分为上半部和下半部分 ![](media/image-20221205094038515.png) - 当上半部执行完毕的时候就打开了中断,恢复现场,下半部就靠cpu调度处理一些非紧急的事情,此时的下半部有可能被新的中断打断。 - 假如中断A在上半部执行的时候又发生了中断A,那么只有当A执行到下半部的时候(此时已经打开了中断),才会再次进入A中断的上半部,而不是直接把A中断信号给丢弃了 - 软件中断 处理时机 ![](media/image-20221205094950647.png) - 当有硬件中断发生时候,硬件中断执行完后,顺便检查下是有够软件中断发生 - 当在cpu的节拍中,比如每10ms就检查下是否有软件中断发生 - 下半部处理机制参见[02.Linux驱动开发基础](../02.Linux驱动开发基础/07.Linux中断.md####半部处理机制) 1. 软中断 2. tasklet 3. work queue工作队列 4. 新技术threaded irq ## Linux中断系统中重要数据结构