我有一个Arduino Uno http://arduino.cc/en/Main/ArduinoBoardUno(很棒的小设备!)。它有两个中断;让我们称呼他们吧0 and 1。我将一个处理程序附加到中断 0,并将另一个处理程序附加到中断 1,使用attachInterrupt()
: http://www.arduino.cc/en/Reference/AttachInterrupt http://www.arduino.cc/en/Reference/AttachInterrupt.
打断0被触发并调用其处理程序,该处理程序会进行一些数字运算。如果中断0中断时,处理程序仍在执行1被触发了,会发生什么?
会打断1中断中断0,或者会中断1等到中断0的处理程序执行完成了吗?
请注意,这个问题特别与 Arduino 有关。
在 Arduino(又名 AVR)硬件上,嵌套中断不会发生,除非您有意创建允许其发生的条件。
来自 avr-lib:
AVR 硬件在进入中断向量之前会清除 SREG 中的全局中断标志。因此,通常中断将在处理程序内部保持禁用状态,直到处理程序退出,其中 RETI 指令(由编译器作为中断处理程序的正常函数尾声的一部分发出)最终将重新启用进一步的中断。因此,中断处理程序通常不会嵌套。对于大多数中断处理程序来说,这是所需的行为,对于某些中断处理程序来说,甚至需要这样做才能防止无限递归中断(例如 UART 中断或电平触发的外部中断)。但在极少数情况下,可能需要在中断处理程序中尽早重新启用全局中断标志,以便不推迟任何其他中断超过绝对需要的时间。这可以在中断处理程序的开头使用 sei() 指令来完成,但这仍然在编译器生成的函数序言中留下很少的指令来在禁用全局中断的情况下运行。
(来源:http://linux.die.net/man/3/avr_interrupts http://linux.die.net/man/3/avr_interrupts )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)