invandy / Oregon_NR

Arduino library for Oregon Scientific and Explore Scientific wireless sensors decode and simulate
Other
31 stars 21 forks source link

Подвисания бибилиотеки и срабатывание WDT #23

Open Basoil opened 7 months ago

Basoil commented 7 months ago

В 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 секунд, вызывая срабатывание сторожевого таймера.

для ESP32 можно заменить на ets_delay_us()