Skip to content

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

@Basoil

Description

@Basoil

В 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()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions