我在Arduino库中有一些时间敏感的代码,希望在noInterrupts()和中断()之间保护它。这些文件指出:
当中断被禁用时,某些函数将无法工作,传入的通信可能被忽略。
有哪些(标准的)函数不起作用的列表吗?特别是,我需要通过调用millis()来节省时间。millis()后面的数字是否仍在更新,还是应该将其移出noInterrupts() / interrupts()块?
发布于 2017-07-10 21:13:19
似乎从这个答案,特别是millis()将通过禁用中断来禁用,因为该调用依赖于一个附加在上大约1 1KHz的计时器上的中断。不过,我已经仔细研究过正式文档,也没有找到任何可能受到影响的详尽列表。我相信,许多人对官方文件中的明显缺乏感到失望。
进一步来看,控制ATmega文档中控制millis()的计时器( timer /Counter 0)仍然在后台计算是否启用了中断--问题是,如果您的代码跨越中断会触发的时间,您可能会错过一个滴答。见下文参考资料。
底线是,如果您需要中断,请保持noInterrupts()部分的简短。并保持与中断连接的代码更简短。无论你是用草图还是裸金属编码,保持中断的速度总是很重要的。
https://stackoverflow.com/questions/45020584
复制相似问题