Порядок выполнения блоков на плате

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Ответить
Balzamalex
Сержант
Сообщения: 102
Зарегистрирован: 07.09.2015{, 21:21}
Репутация: 0

Порядок выполнения блоков на плате

#1

Сообщение Balzamalex » 02.03.2016{, 12:13}

С интересом прочитал тему из баг-трекера о порядке выполнения блоков в программе.
Вот эту
В связи с этим появилось предложение о доработке:
Автор пишет:
support писал(а):Порядок  обработки рассчитывается в момент компиляции. Если делать это на лету при отрисовке - программа начнёт тормозить (Вы передвинули блок - порядок изменился).
В программе есть незаметная :-) кнопочка "Проверить проект". Я предлагаю расчитывать порядок выполнения плат после нажатия этой кнопки. Нажал - программа подумала, и написала на блоках порядковые номера выполнения.
Сам пару раз натыкался на такую непонятку - думаю, это будет полезно.
PS А мне в свое время автор утверждал обратное:
(по памяти) "блоки в плате выполняются слева-направо"

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 790
Откуда: Астрахань
Имя: Сергей
Контактная информация:

Порядок выполнения блоков на плате

#2

Сообщение support » 03.03.2016{, 17:42}

Balzamalex писал(а):PS А мне в свое время автор утверждал обратное:(по памяти) "блоки в плате выполняются слева-направо"
И это то же верно. Логические блоки обрабатываются в итоге именно так. Я писал что то объяснение максимально упрощенно а реально логика компилятора схемы намного сложнее. Вот смотрите схему:
Изображение
"Выход" - Конечный блок. Он в этой схеме рассчитывается в первую очередь. Значит пишется

digitalWrite(0,
 
Затем вход этого блока спрашивает у блока 4 (OR) значение. Он начинает возвращать

(Г || 

и через свой второй вход спрашивает у блока 3 значение. И так далее. в результате получается строка


  digitalWrite(0, ( (Г) || (( (В) & (( (А) || (Б) )) )) ));

То есть  сначала расчитывается Результат = А OR Б,  затем Результат = Результат AND В, затем Результат = Результат OR Г.
То есть слева направо как я и рассказывал.

Но это то же очень упрощённо.  Может так потихоньку и расскажу все тонкости. Но честно говоря я уже и сам всего не помню что наваял. Всё таки начало было положено три года назад, и кое что что нормально работает и не требует вмешательства забывается


Автор программы FLProg.

Ответить

Вернуться в «Новые»