首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用noInterrupts() / interrupts()块时,哪些函数不能工作?

当使用noInterrupts() / interrupts()块时,哪些函数不能工作?
EN

Stack Overflow用户
提问于 2017-07-10 19:59:44
回答 1查看 487关注 0票数 2

我在Arduino库中有一些时间敏感的代码,希望在noInterrupts()中断()之间保护它。这些文件指出:

当中断被禁用时,某些函数将无法工作,传入的通信可能被忽略。

有哪些(标准的)函数不起作用的列表吗?特别是,我需要通过调用millis()来节省时间。millis()后面的数字是否仍在更新,还是应该将其移出noInterrupts() / interrupts()块?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 21:13:19

似乎从这个答案,特别是millis()将通过禁用中断来禁用,因为该调用依赖于一个附加在上大约1 1KHz的计时器上的中断。不过,我已经仔细研究过正式文档,也没有找到任何可能受到影响的详尽列表。我相信,许多人对官方文件中的明显缺乏感到失望。

进一步来看,控制ATmega文档中控制millis()的计时器( timer /Counter 0)仍然在后台计算是否启用了中断--问题是,如果您的代码跨越中断会触发的时间,您可能会错过一个滴答。见下文参考资料。

底线是,如果您需要中断,请保持noInterrupts()部分的简短。并保持与中断连接的代码更简短。无论你是用草图还是裸金属编码,保持中断的速度总是很重要的。

这个外部引用也很有趣,显示了millis()背后的数学和代码。

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

https://stackoverflow.com/questions/45020584

复制
相关文章

相似问题

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