如stackoverflow-17135805中所述,如果中断被禁用,millis() 函数不会返回正确的时间,而 Arduino 必须检测 timer0 的溢出。
我有一个时间紧迫的程序,它使用了很多必须禁用中断的功能。所以我的程序运行 1:30,而它认为它只运行了 1:00。
是否有另一个计时器可以用来避免这个问题?
当我使用 GSM 模块时,它发生在我身上:
// startpoint
unsigned long t = 0;
unsigned long start = millis();
while ( (millis()-start) < 30000 ){
//read a chunk from the gprs module
for (int i=0;i<8;i++)
client.read();
//do this loop every 10ms
while( (millis()-start) < t*10 ){};
t++;
}
//endpoint
从起点到终点应该需要 30 秒。相反,它需要 65 秒。