我试图找到一个正确的答案,但找不到任何答案,我需要知道在任何系统中实施一组 ISR 时必须考虑哪些问题。
提前致谢 !!
中断服务程序(呃!)服务于“中断”。“中断”几乎就是 - “正常”代码的执行被中断(出于多种原因中的任何一个),并且控制权被传递给与先前执行的代码没有真正关系/知识的服务例程(即使该代码以某种方式导致了中断)。
请记住,中断可以发生在许多“级别”——非常低级别的 ISR 可能会处理未实现的指令(例如,不支持该功能的 FPU 中的“sqrt”指令)并模拟该功能。它们可以处理设备 I/O(与执行代码完全无关)、页面错误、程序错误等。
通常(它因处理器、操作系统和中断类型而异)进入 ISR 时只保存了最低限度的“处理器状态”,因此 ISR 必须首先保存足够的状态(额外的 GPR、状态寄存器等),直到它有足够的自由来执行其功能。通常,保存将保存到预先分配的“中断保存区域”中,除非中断“高级别”足以允许 ISR 可分页,在这种情况下可以使用堆栈顶部。
然后 ISR 必须执行其功能,小心地将自身限制在可用资源中(例如,如果不处于可分页状态,则仅使用“固定”存储)。
最后,ISR 必须恢复被中断的环境并返回,或者,如果要将中断转换为异常,则创建相应的异常信号环境并发出异常信号。