ESP32 (Arduino Core): цикл while (true) в функции настройки - PullRequest
0 голосов
/ 09 ноября 2019

на самом деле просто короткий вопрос, но я не смог найти никакой информации по этому поводу: нормально ли не использовать функцию Arduinos loop, а иметь цикл while(true), выполняющийся в функции setup?

Я спрашиваю, потому что мне нравится иметь класс, который имеет дело с конфигурацией WiFi. Он считывает данные о подключении WiFi из настроек и, если он не может подключиться (из-за отсутствия настроек или из-за недоступности сконфигурированной точки доступа), он должен открыть точку доступа, дождаться конфигурации (через веб-сервер) и затем перезагрузиться.

Но я не хочу, чтобы указатель выполнения достигал фактического loop, когда необходимо настроить соединение WiFi. Фактический loop предназначен только для нормальной работы. Таким образом, я создал цикл while(true) в этом классе конфигурации WiFi. Кажется, это работает, но есть ли какие-либо последствия, о которых я должен знать? Или в принципе нормально делать это таким образом?

Как примечание: я использую delay() вызовы (или yield() вызовы) в этом цикле while(true).

Спасибо!

1 Ответ

2 голосов
/ 09 ноября 2019

Ваш код. Ты можешь делать что захочешь. Ожидание соединений в setup () абсолютно нормально и является обычной практикой.

Как вы можете видеть в реализации main () Arduino: https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/main.cpp

int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;
}

Единственное, что нужно учитывать, эточто вы не можете использовать SerialEvent

https://www.arduino.cc/en/Tutorial/SerialEvent

SerialEvent происходит всякий раз, когда новые данные поступают в аппаратный последовательный RX. Эта процедура запускается между каждым циклом времени ():

...