Arm 当我在进入中断处理程序之前清除中断标志时发生了什么?

Arm 当我在进入中断处理程序之前清除中断标志时发生了什么?,arm,stm32,interrupt,interrupt-handling,Arm,Stm32,Interrupt,Interrupt Handling,假设一个中断(中断1)在我处于ISR中时发生,另一个中断(中断2)具有相同或更高的优先级。然后在退出当前ISR之前,我清除中断1的中断标志。中断1的中断处理程序仍将被执行还是中断1将被忽略 在上下文中,我使用的是STM32微控制器 谢谢你从其他CPU的过去经验来看,你没有中断 在这种情况下,在清除中断1标志之前: 只需读取中断1标志位并临时存储即可 清除中断标志(在某些读取中断标志的CPU中,会自动清除中断标志) 在中断2结束时,检查存储的位 如果未设置,只需保留中断2例行程序 如果设置了,

假设一个中断(中断1)在我处于ISR中时发生,另一个中断(中断2)具有相同或更高的优先级。然后在退出当前ISR之前,我清除中断1的中断标志。中断1的中断处理程序仍将被执行还是中断1将被忽略

在上下文中,我使用的是STM32微控制器


谢谢你

从其他CPU的过去经验来看,你没有中断

在这种情况下,在清除中断1标志之前:

  • 只需读取中断1标志位并临时存储即可
  • 清除中断标志(在某些读取中断标志的CPU中,会自动清除中断标志)
  • 在中断2结束时,检查存储的位
    • 如果未设置,只需保留中断2例行程序
    • 如果设置了,并且两个中断具有相同的优先级(或者不重要!):
      • 只需跳转/调用另一个中断1例程(“停留在中断2例程执行中”)
    • 如果设置了中断1,且中断1的优先级不相同,则必须为其分配适当的优先级:
      • 然后就很难了,这里有一些选择:
        • 有一次,我强迫cpu触发另一个未使用的中断3,其优先级与中断1相同,因此使用中断3执行“中断1”例程
        • 使用上述技巧和更多功能,尽可能地在代码中构建中断优先级处理

PS:这应该在处理器手册中描述,清除中断位是否会使其执行松懈-大多数情况下是的,中断位只是一个“中断挂起”位。有时不容易找到描述,但可以找到日常业务。

当您阅读(arm和st)文档时,您发现了什么?您不了解的部分是什么?STM32太模糊了。您尝试时发生了什么?如书面所述,问题的答案是“视情况而定”,您还需要清除NVIC控制器中的挂起位。清除这些位将跳过DV所需的另一个中断,因为答案与STM32没有任何共同之处。我建议在回答问题之前阅读一些文件。布谷鸟有责任阅读这些文件,他没有,否则他会知道答案,或者在提问之前添加更多的调查细节。因此,我添加了一个“PS”作为提示。