嵌入式系统及应用内容摘要:

用高优先级中断的服务程序。 • 当高优先级中断的服务程序执行完成后,再 恢复先前的中断服务程序继续执行。 26 电子科技大学嵌入式软件工程中心 程序 高优先级中断服务程序 B 中断服务程序 A 中断的嵌套处理 27 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 中断服务程序通常包括三个方面的内容: – 中断前导: •保存中断现场,进入中断处理。 – 用户中断服务程序: •完成对中断的具体处理。 – 中断后续: •恢复中断现场,退出中断处理。 28 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 中断前导和中断后续通常由内核的 中断接管程序来实现。 – 硬件中断发生后,中断接管程序获得控制权,先由中断接管程序进行处理,然后才将控制权交给相应的用户中断服务程序。 – 用户中断服务程序执行完成后,又回到中断接管程序。 中断向量号 0 物理中断向量表 中断向量号 1 中断向量号 2 中断向量号 3 …… 中断向量号 n 中断接管程序 中断向量号 0 虚拟中断向量表 中断向量号 1 中断向量号 2 中断向量号 3 …… 中断向量号 m 用户中断服务程序 0 用户中断服务程序 1 用户中断服务程序 2 用户中断服务程序 3 用户中断服务程序 m 用户中断服务程序 29 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 中断接管程序负责中断处理的前导和后续部分的内容。 – 中断处理前导 :保存必要的寄存器,并根据情况在中断栈或是任务栈中设置堆栈的起始位置,然后调用用户中断服务程序。 – 中断处理后续 :实现中断返回前需要处理的工作,主要包括恢复寄存器和堆栈,并从中断服务程序返回到被中断的程序。 • 用户中断服务程序被组织为一个表,称为 虚拟中断向量表。 • 如果需要在用户中断服务程序中使用关于 浮点运算 的操作,中断前导和中断后续中还需要分别对浮点上下文进行保存和恢复。 30 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 在可抢占内核中,如果中断处理导致系统中出现比被中断任务具有更高优先级的就绪任务: – 需要把 高优先级 任务放入就绪队列; – 把被中断的任务从执行状态转变为 就绪状态 ; – 完成用户中断服务程序后,在中断接管程序的中断后续处理中 激活重调度程序 ,使高优先级任务能在中断处理工作完成后得到调度执行。 31 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 在允许中断嵌套的情况下,在执行中断服务程序的过程中,如果出现高优先级的中断: – 当前中断服务程序的执行将被打断,以执行高优先级中断 的中断服务程序; – 当高优先级中断的处理完成后,被打断的中断服务程序才又得到继续执行; – 发生中断嵌套时,如果需要进行任务调度,任务的调度将延迟到最外层中断处理结束时才能发生。 32 电子科技大学嵌入式软件工程中心 实时内核的中断管理 • 中断服务程序使用被中断任务的任务栈空间。 – 在允许中断嵌套处理的情况下,如果中断嵌套层次过多,中断服务程序所占用的任务的栈空间可能比较大,将导致任务栈溢出。 • 使用专门的中断栈来满足中断服务程序的需要,降低任务栈空间使用的不确定性。 – 在系统中开辟一个单独的中断栈,为所有中断服务程序所共享。 – 中断栈必须拥有足够的空间,即使在最坏中断嵌套的情况下,中断栈也不能溢出。 • 如果实时内核没有提供单独的 中断栈 ,就需要为任务栈留出足够的空间,不但要考虑通常的 函数嵌套调用 ,还需要满足 中断嵌套 的需要。 – 使用单独的中断栈还能有效降低整个系统对栈空间的需求,否则需要为每个任务栈都预留处理中断的栈空间。 33 电子科技大学嵌入式软件工程中心 YourISR: 保存全部 CPU寄存器。 (1) 调 用 OSIntEnter() 或 OSIntNesting变 量加 1。 (2) /*OSIntNesting跟踪中 断 嵌套 层数 */ if (OSIntNesting = = 1) { (3) OSTCBCurOSTCBStkPtr = SP。 (4) } /*如果是第一 层 中 断 , 则将 堆 栈 指 针 保存到任 务 的 OS_TCB中 */ 清 中 断 源。 (5) 重新 开 中 断 (6) 执 行用 户 代 码 做中 断 服 务。 (7) 调 用 OSIntExit()。 (8) 恢 复 所有寄存器。 (9) 执 行中 断 返回指令。 (10) uC/OS的 Interru。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。