В int Oregon_NR::collect(byte* cdptr)
есть несколько мест, где есть циклы, ждущие нужное количество микросекунд:
*cdp = 0;
for (byte ckl = 0; ckl < 8; ckl++)
{ // Читаем 8 раз за полутакт
pre_marker += quant;
**while (micros() < pre_marker);**
if (digitalRead(RECEIVER_PIN)) *cdp += 0x10; // Измерения запиываем в старший полубайт
}
регулярно сталкиваюсь, что pre_marker уже у границы uint32_t (примерно 4.3 млрд), а micros() уже переполнился, и этот while тормозит на 4000 секунд, вызывая срабатывание сторожевого таймера.
В int Oregon_NR::collect(byte* cdptr) есть несколько мест, где есть циклы, ждущие нужное количество микросекунд:
регулярно сталкиваюсь, что pre_marker уже у границы uint32_t (примерно 4.3 млрд), а micros() уже переполнился, и этот while тормозит на 4000 секунд, вызывая срабатывание сторожевого таймера.
для ESP32 можно заменить на ets_delay_us()