一个AVR MCU (Arduino)会记住在nointerrupts()部分发生的所有中断吗?
void f1() {
noInterrupts();
// critical, time-sensitive code here
interrupts();
}
//now jump to queued interrupts if any它会在interrupts()之后执行它们吗
我之所以这样问,是因为在阅读了数据表后,我感觉所有的中断都有自己的标志,所以这可能不是问题。但我没有那么有经验,我可能遗漏了一些东西,因为其他教程总是含糊地说“不要在那里停留太长时间,因为在那个时候可能根本不会发生中断”。
为什么?
我有一个循环缓冲区,我在其中放置了一些来自I2C的数据包(每当I2C中断发生时,它们就会被放入其中)。我偶尔也会从主循环中读取这个缓冲区,在不可预知的时间,并且允许覆盖。
另外,我在相反的方向上使用相同的buffer类(但不同的实例)(然后I2C触发中断和读取)。
我的问题是:我想在非中断读/写期间关闭中断,这样我就可以确定我不会处于I2C触发并覆盖当前从正常主循环读取的项目的情况下。
我现在使用读之前和读后的标志来处理这种情况,所以中断首先检查项目是否空闲,但我对这种方法不太有信心,我希望在主循环读取期间使其与noInterrupts()和interrupts()一起工作。
谢谢。
https://stackoverflow.com/questions/41432293
复制相似问题