Embedded 关于ISR期间中断的问题
第一次张贴在这里,让我知道这是否应该张贴在其他地方。请善待我:p 在一次徒步旅行中,我遇到了这个问题,之后我找不到确切的答案 假设我有一个事件的ISR。通常,事件将触发中断,ISR将运行,然后我们将继续我们的快乐之路 假设现在我有一些共享变量,作为一个超级简单的修复,我在关键部分全局禁用中断。如果事件发生在该关键部分,ISR是在重新启用中断后执行,还是从未处理该事件 此外,如果在中断标志清除后但在ISR完成之前,ISR内部发生事件,会发生什么情况?如果发生多次,是否只处理ISR中发生的第一次 感谢所有的答案。通常情况下,我会保持ISR足够短,这样就不会发生这种情况Embedded 关于ISR期间中断的问题,embedded,hardware,interrupt,Embedded,Hardware,Interrupt,第一次张贴在这里,让我知道这是否应该张贴在其他地方。请善待我:p 在一次徒步旅行中,我遇到了这个问题,之后我找不到确切的答案 假设我有一个事件的ISR。通常,事件将触发中断,ISR将运行,然后我们将继续我们的快乐之路 假设现在我有一些共享变量,作为一个超级简单的修复,我在关键部分全局禁用中断。如果事件发生在该关键部分,ISR是在重新启用中断后执行,还是从未处理该事件 此外,如果在中断标志清除后但在ISR完成之前,ISR内部发生事件,会发生什么情况?如果发生多次,是否只处理ISR中发生的第一次 感
谢谢 由于您对特定的处理器或中断控制器没有具体说明,因此以下内容通常是正确的。对于特定的实现,您必须查阅特定硬件的参考资料 当中断被禁用时发生中断时,将设置一个“中断挂起”标志,如果事先未明确清除该标志,则一旦中断被重新启用,将立即调用中断 此外,如果在中断标志清除后但在ISR完成之前,ISR内部发生事件,会发生什么情况 假设中断控制器自动禁用活动中断,中断将再次变为挂起,ISR将在完成后立即调用。挂起标志不是计数对象,因此如果设置挂起标志后发生多个事件,则不会导致ISR针对每个事件运行 如果您的ISR未在另一事件发生之前完成,则您有以下一项或多项:
例如,在信号处理中,ADC可能具有非常高的采样率,并且每个采样产生一个中断,因此处理器可能无法处理中断率。在这种情况下,使用ADC中断可能是不实际的——任何高于1KHz的采样率,但取决于处理器性能以及可用CPU周期内必须完成的其他工作。在这种情况下,一种解决方案是使用DMA传输,DMA控制器在样本完成时发出信号,并将样本直接传输到内存。可以将其配置为在为整个样本块生成单个中断之前对多个样本执行此操作。一次处理一组样本通常比在中断中一次处理一个样本的开销要低得多。由于您对特定的处理器或中断控制器不太了解,因此以下内容通常是正确的。对于特定的实现,您必须查阅特定硬件的参考资料 当中断被禁用时发生中断时,将设置一个“中断挂起”标志,如果事先未明确清除该标志,则一旦中断被重新启用,将立即调用中断 此外,如果在中断标志清除后但在ISR完成之前,ISR内部发生事件,会发生什么情况 假设中断控制器自动禁用活动中断,中断将再次变为挂起,ISR将在完成后立即调用。挂起标志不是计数对象,因此如果设置挂起标志后发生多个事件,则不会导致ISR针对每个事件运行 如果您的ISR未在另一事件发生之前完成,则您有以下一项或多项: