我正在浏览一些大致如下的代码:
虽然我理解只有1位的基本操作,但在下列情况下会发生什么:
这是否意味着错过第二个中断?如果是这样,克服这个问题的方法是什么?
中断处理程序的任务是尽可能快地处理中断。
为了与系统的其余部分进行通信,ISR使用(循环)缓冲区来放置cause
。它在处于中断禁用状态时执行此操作。
中断服务完成后,系统继续运行。如果用户进程现在想要检查循环缓冲区中的新事件,则需要对缓冲区进行独占访问。此外,它必须禁用中断(优先级高于ISR)。它禁用中断,获取缓冲区的下一个元素,更新缓冲区指针或索引并重新启用中断。
如果新的中断进入,则在用户进程重新启用中断之前不会处理(IRQ线保持高电平,芯片寄存器尚未被读取)。不用说,这个缓冲区访问也必须尽可能快(尽可能少的指令)。重新启用中断后,将处理新的待处理中断。
从缓冲区获取下一个项目后,它将其交给功能用户进程。如果缓冲区中没有项目,它会睡觉。当一个项目到达时,它将被唤醒,禁用中断,获取项目,重新启用中断并返回到用户进程。
这样,就不会错过任何中断。