Как указано в 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 секунд.