задержка

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Spark, 26 мар 2017.

  1. Spark

    Spark Нерд

    Здравствуйте! Не могли бы вы поведать мне о способах задержки программы? я знаю про setInterval и setTimeout, а есть ли еще какие-нибудь команды для задержек?
     
    Konkery нравится это.
  2. ИгорьК

    ИгорьК Гуру

    В JS задержек быть не должно.
    Может быть пауза между событиями, вот она и организуется через указанные инструкции.
    Программа на JS не должна останавливаться.
    Если Вы программируете МК на Си, привычная логика построения программы здесь не годится.
     
  3. Konkery

    Konkery Гик

    setInterval и setTimeout не для задержек, а для планирования во времени, выполнения кода
     
  4. Konkery

    Konkery Гик

    Не соглашусь. Это в браузерном JS есть серьезные ограничения по "простою" программы. В реализации
    Espuruino, которая во первых ориентирована на работу в embedded системах, где тайминги очень важны
    при работе с различного рода переферией, во вторых она ближе по своему смыслу к Node.js, а не к
    браузерным платформам, и здесь сам программист вполне может решить применить "задержки", если
    ему так удобнее/целеесобразнее и т.п.
    ниже фрагмент кода формирующий задержку (2 ms), который я применял при работе с знакогенерирующими
    дисплеями, т.к. код работал в инициализирующем блоке, т.е. выполнялся ровно один раз, и до выполнении
    этого инициализирующего кода основной код не работал, то мне было комфортней таким образом
    применить задержку:
    Код (Javascript):
    old_time = getTime();
    for(var delta_time;;)
        {  
            delta_time = getTime() - old_time;
                if (delta_time > 0.002) { break; }
        }
     
    arkadyf нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Полагаю, ваше устройство при этом работает с двумя UART и на SPI у него висит NRF...
     
  6. ИгорьК

    ИгорьК Гуру

    Почему ТС задает вопрос? Потому что на всем поле примеров, которые он видел, не был посажен овощ, по имени задержка.
    Знать его нужно в последнюю очередь, уж точно после таких вещей как замыкания и callback.
     
    arkadyf нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Вот что говорит автор Espruino на тему задержек:
    Snap_2017.03.27_10h05m08s_001.jpg

    Ну и код задержки от него же :):
    Код (C++):
    var t=getTime()+1000;
    while(getTime()<t);
     
    Последнее редактирование: 27 мар 2017
  8. Konkery

    Konkery Гик

    Приведенная вами выкопировка мне знакома и по сути мною сказанного ничего не меняет. В статье создатель поясняет почему нет ф-и delay как таковой, и как в целом нужно поступать, в связи с тем, что подход в JS иной, НО, это в принципе никак не мешает применять задержки там где это нужно, т.к. в противном случае из за выполнения другого асинхронного кода у вас могут съехать тайминги там где как раз это важно, в силу того что движок JS по своей сути однопоточный (!). Если вы как программист планируете поведение программного кода, то вы в целом понимаете где можно применить задержку для формирования чего очень важно. В приведенном мной примере формируется 2-х ms задержка которую по меркам JS/Espruino вполне можно считать небольшой. С другой стороны если вам нужна 500 ms задержка
    (пример автора из документации:
    // some commands 1
    delay(500);
    // some commands 2
    )
    то в этом случае нужно поступать по другому.
    PS: представленный мной код формирующий задержку по сути ничем не отличается от
    представленного вами из документации, с той лишь разницей что применены разные циклы.
    PPS: резюме - грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне можно (как и налюбой мне известной embedded платформе) а вот системно применять задержки на значительные промежутки времени это уже непонимание работы механизма "движка" JS, о чем собственно автор и написал в документации.
     
    arkadyf нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Согласен :)
    Ваше резюме грааааздо круче чем приведенная мной ссылка на автора. Да и вообще - мощно!
    ... главное чтобы ТС понял, и так не делал.
     
  10. ИгорьК

    ИгорьК Гуру

    Надеюсь, Вы знаете что говорите и уверены в своих силах. Велкам: http://forum.amperka.ru/threads/Плавное-управление-сетевым-освещением-pid-Вопрос-разработчикам.9765/
    Поможете?
     
  11. Konkery

    Konkery Гик

    С удовольствием помог бы, если бы на текущий момент не напряженка со свободным временем.
    По диагонали пробежав ветку, не смог сходу понять какое отношение возникшие у вас проблемы
    относятся к теме применимости задержек в JS на embedded платформах ?
    Кстати как вы написали у вас возможно проблемы из за работы таймера, но о такого рода
    проблемах я собственно писал выше.
     
  12. ИгорьК

    ИгорьК Гуру

    Там как раз и надо "грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне".

    Суть состоит в том, что после получения 0 на одной ноге (вход) следует постоянно с требуемой задержкой (сидит в какой-нибудь переменной) от 0.2 до 4 мс выставлять другую ногу (выход) в 1.

    Мне это не удалось никаким способом. Тому, кто был в той теме тоже.

    Просто услышав про "грамотно применять задержки под платформой Espuruino" и "как и налюбой мне известной embedded платформе" подумал что Вам это на раз.
     
  13. Konkery

    Konkery Гик

    Ну так извините, я бы даже и не пытался под JS работать на долях миллисекунды. Речь о формировании задержки порядка 1...20 ms и ни как системный подход, а как (негарантированная) схема сохранения таймингов на данном отрезке времени. В какой то ветке я поднимал обсуждение - обработка в Espruino/JS нескольких сотен микросекунд ответ мне был таким- никак, вернее никак если только не делать это частью ядра Espruino (соответственно разрабатывать встроенный модуль на С/С++), но во первых это отдельная тема, а во вторых может сделать работу непредсказуемой "новоиспеченного" ядра.
    Человек конкретно спросил "Здравствуйте! Не могли бы вы поведать мне о способах задержки программы?" на это и был ответ, с кратким комментарием приминимости.

    PS: Espruino насколько я знаю внутренний цикл обработки составляет порядка нескольких ms
     
  14. ИгорьК

    ИгорьК Гуру

    Неполная цитата.
    "а есть ли еще какие-нибудь команды для задержек?"
    Ответ: команд нет. Ни одной. Есть способы оттормозить программу, которые не приветствуются.
     
    arkadyf нравится это.
  15. sys

    sys Злобный Буратино Модератор

    Мне тоже кажется, что применение реалтайм интерпретаторов для "тонкой" работы со временем не самая удачная мысль...
     
    arkadyf и Konkery нравится это.
  16. ИгорьК

    ИгорьК Гуру

    Нельзя не согласиться. Проверено на собственной шкурке.
    Только ясно это (для начинающего после Ардуино) становится ой как не сразу. И утверждения вида "грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне можно (как и налюбой мне известной embedded платформе)" сильно отдалаяют такое понимание.
     
    arkadyf нравится это.
  17. Konkery

    Konkery Гик

    причем тут понимание идеологии espruino/js и вопрос который был задан:
    "Здравствуйте! Не могли бы вы поведать мне о способах задержки программы? я знаю про setInterval и setTimeout, а есть ли еще какие-нибудь команды для задержек?"
    Зачем коней с яблоками мешать ?
    Ну понятно бы было если вопрос звучал примерно "...а годиться ли эта платформа для работы периферией
    которая требует четкого соблюдения коротких (1...100 us) таймингов ?", но вопрос то звучал о другом

    PS: собственно на заре знакомства с Espruino/JS примерно такой вопрос я и задавал, на что и получил вполне конкретный ответ - нет.
    полагаю тема исчерпана
     
  18. ИгорьК

    ИгорьК Гуру

    :) Красиво. За Вами, естественно, последнее слово!
     
  19. rkit

    rkit Гуру

    Можно с помощью ассемблерных вставок.
     
  20. ИгорьК

    ИгорьК Гуру

    Можно. А кто умеет?