delay что делает с питанием?

Тема в разделе "Arduino & Shields", создана пользователем ELITE, 3 апр 2018.

  1. DetSimen

    DetSimen Guest

    Это не для ТС, а для взрослых.
     
    DIYMan и Asper Daffy нравится это.
  2. parovoZZ

    parovoZZ Гуру

    это про goto? Не, нет таких.
     
    Asper Daffy нравится это.
  3. Asper Daffy

    Asper Daffy Иксперд

    Ну и слава те Господи!
     
  4. ostrov

    ostrov Гуру

    То есть он долбит только во время delay, в остальных случаях его нужно дергать вручную. Довольно странная возможность, даже не знаю где это реально можно применить.
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Вопрос привычки. Концепция yield возникла задолго до ардуино и существует практически во всех системах. Суть её в том, что если рисуется блокирующий цикл, то надо её в этом цикле вызывать, чтобы дать возможность и другим кускам программы сто-то делать (за флагами следить или там кнопки проверять).

    Например, в ардуине (из коробки), акромя delay, она активно используется в библиотеке Ethernet в функциях send, sendto, igmpsend и sendUDP.
     
  6. ostrov

    ostrov Гуру

    Ну в реальных ситуациях это странно. То есть какая то функция будет работать только во время delay, не могу представить что это может быть. Все таки ну ее нафиг, пусть все работает через millis и прерывания, как то оно нагляднее и универсальнее.
     
  7. parovoZZ

    parovoZZ Гуру

    те ж объясняют - цикл может быть абсолютно любой, delay - как частность.
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Почему только из delay()? Откуда угодно.

    Смотри, реальная ситуация:
    Код (C++):
    //
    //    Аварийное отключение
    //    системы
    //
    void emergencyOff(void) {
        // lala
    }

    //
    //    Проверяет значения тока
    //    (температуры и ещё 100500 датчиков)
    //    и возвращает true, если надо
    //    НЕМЕДЛЕННО аварийно выключать систему
    //
    bool checkEmergency(void) {
        // lala
    }

    void yield(void) {
        if (checkEmergency()) emergencyOff();
    }

    void loop() {
        yield();
        digitalWrite(13, HIGH);
        delay(1000);
        digitalWrite(13, LOW);
        delay(1000);
    }
     
     
  9. ostrov

    ostrov Гуру

    Да понятно что дергать можно откуда угодно, но уникальность именно в дергании во время delay.
     
    Последнее редактирование: 3 апр 2018
  10. parovoZZ

    parovoZZ Гуру

    код ни разу не кашерный
     
  11. ostrov

    ostrov Гуру

    Да вообще если уж delay использовать то только там где больше ничего не происходит.
     
  12. DIYMan

    DIYMan Guest

    Не, ты неправ. delay тут вообще не при делах, yield внутри, как правильно заметили - частный случай. Я активно пользую yield для критичных ко времени выполнения операций, юзкейс из жизни: отрисовка на TFT 7 дюймов - медленная операция, пока весь экран заливаешь каким-то цветом - приёмные буфера Serial* могут протухнуть сто раз. Ясное дело, что отрисовка не зависит от конкретики проекта, поэтому делается просто: в нужных местах (правил библиотеку UTFT) вставляется вызов yield, и всё.

    Далее - я объявляю yield и внутри неё делаю своё черное дело - вычитываю из буферов Serial, чтобы не протухали, пока TFT тупит в отрисовке. Ни одного delay при этом не юзается :)
     
  13. parovoZZ

    parovoZZ Гуру

    ну почему же? Если надо ловить микросекунды, то ничего, кроме как delay_us из стандартной поставки на ум и не приходит.
     
  14. Asper Daffy

    Asper Daffy Иксперд

    А я ни разу и не еврей :)
     
  15. ostrov

    ostrov Гуру

    Я то про этот конкретный случай с delay говорю. А в других ситуациях и подходы другие, что то вообще через прерывания частями делать, что то через директивный перескок. Да хоть RTOS тот же использовать. Но именно в delay совершенная дичь.
     
  16. ostrov

    ostrov Гуру

    Ну вот не так давно чел заказал мигалку: мигает светодиод в определенной последовательности, два десятка заранее установленных разныхпауз и так по кругу. Почему бы не использовать delay? Вот там ему самое место.
     
  17. parovoZZ

    parovoZZ Гуру

    не профессионально подобран МК. От того и делеи.
     
  18. ostrov

    ostrov Гуру

    Сейчас я буду специальный МК искать, потом вникать в его систему, устанавливать IDE, программатор покупать и тд и тп. Вместо того чтобы взять Attiny13 за 80 руб и за 10 минут программу на него написать и залить. Я уже писал выше, что свое время я ценю гораздо выше чем время машинное!