我有一个简单的问题,从我读到的内容中显然没有在网上说:我知道 Arduino 上的 millis() 在自定义中断期间不会改变,但相关的计时器是否仍然在后台计数?
我的程序是时间敏感的,我想知道每次处理我的一个中断时是否应该增加它的值(如何?),这样主程序的时钟就不会漂移。
提前致谢, 问候, Mystère 先生
即使中断被禁用,CPU 内部定时器也会计数。但是当定时器溢出时会产生一个中断,这将增加库中的一些计数器。如果那个中断被阻塞了很长时间......那么你就会有一个漂移。
CPU 定时器是硬件,不受任何中断标志的影响。一旦溢出,就会设置溢出位/触发中断。如果此时中断被阻塞,则该中断将被排队。队列大小为 1,即在触发下一个中断之前必须允许中断。由于定时器大约每毫秒溢出一次,因此您需要确保阻塞中断的时间不会超过~1ms。
无论如何,由于Arduino的时钟根本不那么精确,因此您会有所偏差。请参阅我关于晶体偏差的实验。