2

我在 Arduino (Avr) 中有一段代码,我想在不被中断中断的情况下执行它,该中断也对这段代码中使用的变量进行操作。我不希望在执行代码时丢失该中断;相反,我想让中断被推迟一小段时间。我只想推迟这一次中断,而不是所有中断。

现在我正在清除该中断掩码并在代码完成后再次设置它。这管用吗?这是代码的样子:

我不想被那个中断打断的一段代码(在这种情况下是 timer1 溢出中断):

  TIMSK1 = 0; //Set Timer1 Mask off. Just postponed ???? I hope so.
  int c = buffer[reading_pointer]; 
  reading_pointer = (reading_pointer + 1)%SIZE_OF_BUFFER;
  something_on_buffer = false;
  //buffer and something_on_buffer are set on Timer1 interrupt. 
  TIMSK1 |= (1 << TOIE1); //Enable timer1 again.

something_on_buffer 并且也设置在 Timer1 上,如果在读取缓冲区和设置这段代码buffer的中间执行中断会发生冲突,这就是我想为这几行代码推迟 Timer1 中断的原因。something_on_buffer只是要确定。这个怎么做?这是正确的方法吗?

4

1 回答 1

0

你的方法看起来不错。

通常,处理器有一个用于中断的标志寄存器和一个用于启用中断的寄存器。在每一步,处理器检查标志位和使能位,看它是否应该运行中断。也就是说,启用位不控制是否设置标志,只有在设置标志引起中断运行时。

如果通过设置该位启用中断并且标志已经设置,则中断在下一条机器指令之前运行。

如果中断没有使能,标志位仍然可以由条件设置。

于 2012-12-02T03:58:51.947 回答