Пример распараллеливания
- Войдите на сайт для отправки комментариев
Сб, 28/06/2014 - 11:04
Здравствуйте. Имеется такая задача: во время выполнения цикла в лупе void loop(){ while(1) {} } (который выполняется постоянное безо всяких delay() ), сделать вывод lcd.print() раз в 10 секунд, не прерывая тот while и не снижая частоту его выполнения.
Подскажите пожалуйста, как это осуществить. Я погугли на эту тему и ничего не смог найти :(
Проверять millis() на прибавление 10секунд? но там же будет переполнение и... ну это самый понятный вариант и в отсутствии других будет использован он.
вам нужно переделать void loop(){ while(1) {} } на работу через прерывания, так как это не правильный подход. Если нужно задать частоту очень точно - нужно использовать синтезатор частот а не вложенные циклы. Вобщем у вас в любом случае раз в 10 секунд будет задержка на несколько милисекунд и частота изменится(один период вытянется). Если нужно отловить короткий импульс - надо использоват прерывание, но не циклы. Если нужно частоту то нужно использовать таймер и прерывание по таймеру.
Прерывания никак не удается осилить :(
Возможно я слишком утрировал в начале... в цикле while() происходит отлавливание запроса приходящего по http. Т.е. задержка даже в 100-250мс никак не скажется на работе.
Возьмите дуе, она может несколько циклов выполнять одновременно
Давно использую http://blog.ksduino.org/post/42862084042/pseudo-multitasking-using-timer-in-arduino-sketch
работает под 328 процем без проблем. Очень удобно.
Задаете процессы и периоды их повторения. При выходе из каждого процесса можно изменить паузу до следующего вызова. Благодаря такой гибкости я например реализую длинный программный шим для управления SSR-z .
В примере вся программа сидит в процессах, в loop остается только перезапуск таймера и перезапуск ksd протокола, который сам по себе интересен, но здесь является оффтопиком. В конце подпроцессов виден вызов t.after(), в котором выставляется таймер до следующего вызова подпроцесса.
После освоения этого метода, линейное программирование практически перестал применять.
JollyBiber due нету. покапуть не вариант же
inspiritus оч интересно! спасибо. попытаюсь вникнуть. мб повезет больше чем с прерываниями :)
Это и есть прерывания ;)
там процессы запускаются по прерыванию от внутреннего таймера.
Это и есть прерывания ;)
там процессы запускаются по прерыванию от внутреннего таймера.
Я вот что-то опять окопался, закопался и подвис.
Суть KSduino в чем? Описаная функция - это же функция вот этого таймера
И если я правильно понял, то мой код будет иметь такой вид:
Насколько я прав? :)