Страница 1 из 3

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 15:28
Dryundel
Актуальные библиотеки ecoins здесь
Темы с описанием блоков здесь


RT_диспетчер
.
1.jpg
.
Блок диспетчера задач, пожалуй, основная фишка разработок ecoins, хотя и не является самым сложным. С помощью этого блока осуществляется базовая оптимизация работы программы в контроллере.

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

Все команды, которые выполняет микропроцессор мы можем видеть в текстовом файле при компиляции скетча в Arduino IDE. Принцип последовательности их выполнения довольно прост. Процессор построчно сверху вниз считывает команду выполняет ее, только после этого считывает следующую, так же выполняет и так до конца скетча. После этого происходит возврат в начало, и процедура повторяется в бесконечном цикле.

Каждая команда занимает определенное процессорное время. К примеру считывание состояния дискретного пина – 4-6 мкс, вычисление синуса из числа с плавающей запятой 120 мкс, а очистка дисплея 1,5 мс (1500 мкс). Таким образом, чем больше программа, тем больше времени уходит на каждый цикл. Соответственно при перегруженности процессора он может к примеру, даже не увидеть нажатие кнопки, т.к. занимался в это время какими-то вычислительными задачами.

Основная идея оптимизации, заложенная в блоке «Диспетчер задач» это разбить программу на части и в каждом цикле выполнять только один ее фрагмент.

Условно говоря если у нас есть две задачи: следить за нажатием кнопки и рассчитать значение по формуле x=(a*(b-c))/d то без оптимизации мы проверим кнопку, потом вычислим значение формулы присвоим это значение переменной x и только потом снова (в новом цикле) проверим кнопку. Но нажатие кнопки могло произойти пока мы занимались расчетами и тогда мы об этом никогда не узнаем.

Оптимизированный процесс условно будет таков:
1 цикл – вычисляем b-c.
2 цикл – проверяем кнопку.
3 цикл – производим операцию умножения на a .
4 цикл – проверяем кнопку.
5 цикл – выполняем деление на d,
6 цикл – проверяем кнопку.
7 цикл – присваиваем переменной x результат вычислений.
8 цикл – проверяем кнопку.

В результате – нажатие кнопки мы не пропустили, но и во времени вычисления формулы потеряли совсем не много. Да и не требуется нам суперскоростное вычисление. Например, обновление дисплея нам достаточно делать 2 раза в секунду. Оптимизировав программу таким образом мы освободим много-много циклов для выполнения других задач.

Теперь непосредственно про блок «Диспетчер задач»
.
2.jpg
.
У блока несколько выходов. На каждом выходе появляется высокий уровень, импульс длительностью в один цикл программы и с периодичностью определенной для каждого из выходов.
fast10 – импульс каждые 10 мс
fast – настраивается (по умолчанию 25 мс)
slow – настраивается (по умолчанию 250 мс)
back100 – импульс каждые 100 мс если нет импульсов на других выходах
back – имеет высокий уровень если нет импульсов на других выходах

Вот так все просто. :)

Подавая сигнал на вход En функциональных блоков, мы разрешаем им работу на один цикл программы каждые 25 мс например. Так же можно поступать и с целыми платами. В результате мы распределяем процессорное время между задачами по их приоритету. К примеру пин отслеживаем каждые 10 мс, а переменную отсылаем на LCD каждые 100 мс и то если нет других задач в это время.
.
3.jpg
.
За внешней простотой блока скрывается достаточно четкий алгоритм поднятия флагов (подачи импульсов на выходы) благодаря которому флаг всегда поднят только на одном из выходов. В случае совпадения времени поднятия нескольких флагов. Одно из событий сдвигается на цикл и в следующий раз старается четко выдерживать время срабатывания. Приоритет выходам отдается согласно его расположению, сверху вниз.

Другие блоки этой серии отличаются лишь наличием отладочных выходов.

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 15:28
Dryundel
ВАЖНО!

- На плате диспетчера задач не должно быть других исполнительных блоков. В примере выше блок LCD показан лишь для понимания работы диспетчера задач. Правильней было бы поместить его на отдельную плату и выполнять эту плату по условию.

Вот так:
4.jpg
.
- Все исполнительные платы должны выполняться по условию от диспетчера задач. В противном случае выполнение платы будет происходить каждый цикл.

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 18:23
edyapd
Отличное описание :smile9:
Но! Один минус. Не вижу не самого блока, не ссылку на него. А было бы хорошо иметь его в первом сообщении.
И хорошо бы, чтобы он обновлялся там, если будут обновления.

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 19:39
Dryundel
edyapd писал(а): 14 ноя 2019, 18:23 Но! Один минус. Не вижу не самого блока, не ссылку на него. А было бы хорошо иметь его в первом сообщении.
И хорошо бы, чтобы он обновлялся там, если будут обновления.
Свежие библиотеки и блоки ЗДЕСЬ

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 20:14
edyapd
Dryundel писал(а): 14 ноя 2019, 19:39Свежие библиотеки и блоки ЗДЕСЬ
Эх, я и впрямь думал, что вы собрались разгрести Авгиевы конюшни. А вы всего лишь сделали описание. Хорошее конечно. Но без блока оно ничего не значит.
А сам блок вы предлагаете найти среди 400+ сообщений в теме "разработки ecoins".

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 20:37
Rovki
edyapd писал(а): 14 ноя 2019, 20:14
Dryundel писал(а): 14 ноя 2019, 19:39Свежие библиотеки и блоки ЗДЕСЬ
Эх, я и впрямь думал, что вы собрались разгрести Авгиевы конюшни. А вы всего лишь сделали описание. Хорошее конечно. Но без блока оно ничего не значит.
А сам блок вы предлагаете найти среди 400+ сообщений в теме "разработки ecoins".
Есть же ссылка в начале темы ...

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 20:41
bsn
edyapd писал(а): 14 ноя 2019, 20:14 А сам блок вы предлагаете найти среди 400+ сообщений в теме "разработки ecoins".
Это вы зря так.
Сылка Dryundel очень даже по делу. Скачивайте по ссылке Библиотеки ДЮАИР и вставляете их в пользовательские блоки своего FLProg. А оттуда достаёте всё, что описывает выше Dryundel и экспериментируете.
Как вставлять новые пользовательские блоки поищите в здешнем поиске. Сейчас нет времени это описывать.

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 21:08
edyapd
[ref]bsn[/ref], как вставлять ПБ я в курсе. А вот что конкретно скачивать узнал только от вас. Почему бы сразу это не описать это в первом сообщении? Что все актуальные блоки спрятаны в одном файле. А просто название "Библиотеки ДЮАИР" мне не о чём не говорит.

Блок Диспетчер задач (ecoins)

Добавлено: 14 ноя 2019, 22:57
bsn
edyapd писал(а): 14 ноя 2019, 21:08 что конкретно скачивать узнал только от вас
Тогда должен покаяться. Так как это ещё не всё то, что нужно скачать.
Там же, по этой же ссылке, находите архив 191114_LIB_EIS_v120_beta.zip.
(Примечание: после очередных добавлений и изменений от econis, числа в имени файла ...LIB_EIS... со временем чуть изменятся, т.к. ecsonis их постоянно модернизирует)
Скачиваете, ...LIB_EIS..., расскрываете. Находите там кучу файликов и копируете их. Затем в своём FLProg находите папку ide.. В этой папке раскрываете вложенную папку libraries и в неё вставляете только что скопированные файлы библиотек для IDE. Бывает, что некоторые при компиляции FLProg используют другую IDE. Тогда нужно и туда установить файлы библиотек ..LIB_EIS... от econis.
То бишь, для нормальной работы с блоками econis нужно:
- устанавить в Пользовательские блоки FLProg библиотеку ДЮАИР от econis;
- в IDE, в папку с библиотеками libraries, установить библиотеки ...LIB_EIS..., от econis.

Блок Диспетчер задач (ecoins)

Добавлено: 15 ноя 2019, 06:58
edyapd
Уважаемый [ref]Dryundel[/ref], в свете последних объяснений от [ref]bsn[/ref], не могли бы вы сделать вступительное предложение в вашей статье на подобии такого:
Для тех, у кого ещё не установлены ПБ econis, по ссылке выше, скачиваем и устанавливаем в Пользовательские блоки Библиотеки ДЮАИР. А так же, там же, по этой же ссылке, находите архив 191114_LIB_EIS_v120_beta.zip.
(Примечание: после очередных добавлений и изменений от econis, числа в имени файла ...LIB_EIS... со временем чуть изменятся, т.к. ecsonis их постоянно модернизирует)
Скачиваете, ...LIB_EIS..., расскрываете. Находите там кучу файликов и копируете их. Затем в своём FLProg находите папку ide.. В этой папке раскрываете вложенную папку libraries и в неё вставляете только что скопированные файлы библиотек для IDE. Бывает, что некоторые при компиляции FLProg используют другую IDE. Тогда нужно и туда установить файлы библиотек ..LIB_EIS... от econis.
Потому, как это далеко не очевидно. Лично я например кинулся искать ПБ "Диспетчер задач".

Блок Диспетчер задач (ecoins)

Добавлено: 08 мар 2020, 20:39
Iqubik
Попробовал перестроить большой проект на Диспетчер задач. Всё отвалилось, долго и упорно менял тайминги, но достаточного результата не добился. Как ни странно но проект без оптимизации работает лучше, чем с неверной оптимизацией, ну это я предположил что она неверная.

Блок Диспетчер задач (ecoins)

Добавлено: 08 мар 2020, 22:28
ecoins
Заканчиваем полную переработку библиотек.
Надеемся, что будет не только компактнее и быстрее,
но и проще в использовании.
Будут новые опции.
Удалось освоить обмен параметров между блоками без графических связей - это открыло новые возможности.
Как и прежде, проекты переносимы между разными платформами (Arduino,ESP8266,ESP32,STM32F1);
-----------------------
Большие проекты без планирования задач реализовывать не просто...

Блок Диспетчер задач (ecoins)

Добавлено: 17 май 2020, 11:51
bichek
[ref]Dryundel[/ref], Андрей или кто в курсе,объясните пожалуйста начинающему по поводу диспетчера задач на примере блоков(см.ниже).вариант1:Правильно ли я понимаю,что с нижнего блока"GenNum"будет выходить событие каждую 1 сек.(250mc х делитель блока 4 = 1000mc или 1 сек.)Следовательно Плата3 будет выполняться каждую секунду,Плата
4 каждые 2сек.,а Плата5 каждые 4сек.- по переменной "Номер медленной задачи" от "диспетчера задач".
И почему тогда на платах 4 и 5,в коментариях написано "выполняется каждую секунду"?
Или вариант2: Блок "GenNum" выдаёт в переменную "Номер медленной задачи" числа от 1 до 4(т.к.предделитель стоит 4) через каждые 250mc,и потом опять по кругу от 1 до 4.Следовательно плата3 выполнится через 250mc, плата4- 500mc, ну т.д. :smile37:

Вроде бы начинает доходить!?

Блок Диспетчер задач (ecoins)

Добавлено: 17 май 2020, 23:57
ecoins
Каждая плата будет выполняться 1 раз в секунду - время вызова относительно смежных задач сдвинуто на 250 мс.
Здесь viewtopic.php?f=181&t=5426#p72349 есть примеры и руководства по пользованию.

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 00:47
ViktorPetrov
Ув.[ref]Dryundel[/ref], Пасхалки раздаете :smile38:, :yes: :yes: :yes: .

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 08:16
Dryundel
ViktorPetrov писал(а): 27 сен 2021, 00:47 Ув.[ref]Dryundel[/ref], Пасхалки раздаете :smile38:, :yes: :yes: :yes: .
Был грешок когда то, в слепом порыве помочь с популяризацией. Дату видно? 14.11.2019
Однако все течет и изменяется, бурлит я бы сказал в голове создателя. Актуальное вчера, сегодня мусор.
Увы.
Теперь только такие отзывы и можно увидеть:
edyapd писал(а): 14 ноя 2019, 20:14 Эх, я и впрямь думал, что вы собрались разгрести Авгиевы конюшни. А вы всего лишь сделали описание. Хорошее конечно. Но без блока оно ничего не значит.
А сам блок вы предлагаете найти среди 400+ сообщений в теме "разработки ecoins".
Простите люди, я больше не буду. :smile14:

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 09:00
com
del :smile390:

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 11:44
ecoins
Разработанный диспетчер - очень простой и прозрачный инструмент.
Рекомендуем использовать его во всех проектах FLProg.
Некоторые пользователи, для которых имеет значение быстродействие проектов, используют диспетчер и не испытывают трудностей в его использовании.
Dryundel писал(а): 27 сен 2021, 08:16 Актуальное вчера, сегодня мусор.
Автор этого сообщения блестяще описал принцип работы работы диспетчера.
С момента открытия этой ветки диспетчер по сути не изменился.
Возможно у автора что-то изменилось с понимаем того, что он так тщательно, подробно и тщательно описал....
===============
Еще раз благодарю за проделанную работу по разработанному нами диспетчера.
----------------------
P.S. С моей точки зрения наделять труд коллектива людей (нынешнюю форму он имеет после 2-х летнего труда) эпитетом "мусор" не этично.
У автора возможно другое мнение - его воля и право.
Но теперь я пожалуй дистанцируюсь от прямого общения с носителем такого весьма высокомерного отношения к труду других людей.
Спасибо.

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 12:21
Dryundel
[ref]ecoins[/ref], извините если Вас зацепило мое высказывание.
Ни в коей мере не хотел оскорбить ни Вас ни весь Ваш коллектив.
Повторюсь, наработки Ваши классные, интересные, местами инновационные. Хромает лишь подача и стремление все это объединить в одну библиотеку. По моему мнению, это не делает проект лучше.
Когда я писал фразу:
Dryundel писал(а): 27 сен 2021, 08:16 Актуальное вчера, сегодня мусор.
То имел ввиду свои потуги, двух летней давности, по популяризации проекта.
И это было ответом на пост выше:
ViktorPetrov писал(а): 27 сен 2021, 00:47 Ув.[ref]Dryundel[/ref], Пасхалки раздаете :smile38:, :yes: :yes: :yes: .
Так что очень Вас попрошу, не передергивайте.
Ничего против разработок вашей команды я не имею, а наоборот время от времени вдохновляюсь идеями.
.
Спасибо за понимание.

Блок Диспетчер задач (ecoins)

Добавлено: 27 сен 2021, 16:13
tolochko
К сожалению у нас не так много людей на форуме которые могот расказать просто о сложном
Поэтому большое им спасибо