首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用nointerrupts()函数时,是否会在interrupts()之后排队并执行新的中断?

在使用nointerrupts()函数时,是否会在interrupts()之后排队并执行新的中断?
EN

Stack Overflow用户
提问于 2017-01-03 03:25:38
回答 0查看 536关注 0票数 2

一个AVR MCU (Arduino)会记住在nointerrupts()部分发生的所有中断吗?

代码语言:javascript
复制
void f1() {
  noInterrupts();
  // critical, time-sensitive code here
  interrupts();
}
//now jump to queued interrupts if any

它会在interrupts()之后执行它们吗

我之所以这样问,是因为在阅读了数据表后,我感觉所有的中断都有自己的标志,所以这可能不是问题。但我没有那么有经验,我可能遗漏了一些东西,因为其他教程总是含糊地说“不要在那里停留太长时间,因为在那个时候可能根本不会发生中断”。

为什么?

我有一个循环缓冲区,我在其中放置了一些来自I2C的数据包(每当I2C中断发生时,它们就会被放入其中)。我偶尔也会从主循环中读取这个缓冲区,在不可预知的时间,并且允许覆盖。

另外,我在相反的方向上使用相同的buffer类(但不同的实例)(然后I2C触发中断和读取)。

我的问题是:我想在非中断读/写期间关闭中断,这样我就可以确定我不会处于I2C触发并覆盖当前从正常主循环读取的项目的情况下。

我现在使用读之前和读后的标志来处理这种情况,所以中断首先检查项目是否空闲,但我对这种方法不太有信心,我希望在主循环读取期间使其与noInterrupts()interrupts()一起工作。

谢谢。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41432293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档