Страница 1 из 5
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 18:40}
Phazz
Диспетчер задач сделанный на библиотеке
https://github.com/GyverLibs/GyverOS
Добавлен информационный вход включения ручного режима задачи.
Благодарность
Rovki, за тестирование
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 20:57}
ecoins
Очень и очень любопытный подход.
Остерегаюсь обсуждения с искрами сомнения, которые могут некоторыми участниками форума боленено восприняты как "критика".
Подождал немного, тема интересная ("Диспетчер задач"), попробую что-то написать, возможно буду первым.
1.Интересен и подход, и код от библиотеки Gyver, подсмотрел там любопытное и полезное.
2.FLProg предлагает, подразумевает некоторые новые возможности и также некоторые ограничения, по сравнению с проектом просто на С++.
3.В FLProg заложена и использована одна из ключевых возможностей этой системы - вызов плат по условию. Она появилась не сразу, до неё приходилось как-то "кривоватые" решения подыскивать.
4.На мой взгляд задачей, как единицей проектирования", должна рассматриваться плата или совокупность плат, которые вызываются по условию. Еще очень полезным подспорьем оказался метод "Контакт".
В выложенном Вами тестовом примере на плате 4 завершается задача 1, начинается задача 4, которая завершается на плате 5. Как-то мудрено немного...
5.Еще одна полезная возможность FLProg(и мы ей часто пользуемся при отладке проектов), это отключение платы из процесса компиляции. В предложенном "Диспетчере задач" это можно делать если на каждой плате есть начальный и завершающий блок.
6.В FLProg нет пока жесткого метода выполнения последовательности блоков, как следствие потребуется на каждой плате контролировать эту последовательность вручную, а она может сбиться случайным образом, что может привести к неожиданным и непредсказуемым результатам...
7.Мне представляется, что предложенная библиотека больше подходит для проектов на C++ , и не лучший способ для FLProg.
8.Периодический вызов задач( (если это одна или несколько задач) достаточно просто реализовать и средствами FLProg - это
генератор + триггер по фронту + bool переменная.
По этой переменной можно вызывать требуемую плату (или несколько плат) по условию bool переменная =1. Мы это называем "Вызов по событию". Таких конструкций можно скажем поставить на первой плате неограниченное кол-во и вызывать соотвественно много разных задач.
9.Средствами FLProg можно реализовать и приоритет, и блокирование задач не только по времени, но и дополнительным условиям (пины, счетчики и т.п.).
10.Если требуется что-то поизящнее с приоритетами, заданием кол-ва задач, самое главное, выделение процессорного ресурса когда все периодические задачи уже выполнены, посмотрите на решения "Диспетчера задач" от ecoins - там и код покомпактней, и скорее всего немного побыстрее. Это код находится в библиотеке RT_HW_Base.h ->BASE_030_API_Time.h->API_031_TimerSheduler_h. К слову там реализован любопытный точный генератор с защитой от переполнения от Gyver, которому в свою очередь еще кто-то предложил (на его сайте есть описание).
-------------
Тема планирования задач в FLProg и важная, и полезная, исследования в этом направлении интересны и нужны.
Успехов.
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 21:12}
Dryundel
ecoins писал(а): ↑28.08.2022{, 20:57}
Если требуется что-то поизящнее с приоритетами, заданием кол-ва задач, самое главное, выделение процессорного ресурса когда все периодические задачи уже выполнены, посмотрите на решения "Диспетчера задач" от ecoins - там и код покомпактней, и скорее всего немного побыстрее. Это код находится в библиотеке RT_HW_Base.h ->BASE_030_API_Time.h->API_031_TimerSheduler_h.
ecoins, здесь не пишется библиотека, а используется готовая. Это ваше предложение мне кажется не совсем уместным. Может быть оно будет полезно AlexGyver. Попробуйте с ним связаться.
Ваша ревность в принципе понятна, но не смотря на то, что:
ecoins писал(а): ↑28.08.2022{, 20:57}
Мне представляется, что предложенная библиотека больше подходит для проектов на C++ , и не лучший способ для FLProg.
Этой библиотекой можно пользоваться и делать это легко и удобно.
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 21:54}
Phazz
ecoins, да тут другой подход к выполнению задач. Можно считать это просто альтернативой куче таймеров и условий если это делать все на блоках. Но есть еще одно преимущество. Эти задачи можно вызывать по прерыванию моментально а не ждать пока дойдет до них очередь.
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 22:29}
ecoins
Phazz писал(а): ↑28.08.2022{, 21:54}
ecoins, да тут другой подход к выполнению задач. Можно считать это просто альтернативой куче таймеров и условий если это делать все на блоках. Но есть еще одно преимущество. Эти задачи можно вызывать по прерыванию моментально а не ждать пока дойдет до них очередь.
Да, конечно.
И в этом еще одна "засада" - в прерываниях.
Это может привести к нарушению работы некоторых блоков, которые к этому не приспособлены, например блок измерения HC-SR04, DHT-22.
Впрочем прерываний создающих проблем в реальных проектах и так достаточно.
Как ни странно 3-й год совершенствую блок ds1820 и получаю новые откровения.
Все хорошо работает с AVR, если нет скажем быстрого счетчика по прерываниям и ли как в нашем случае блок HC-SR04 по прерыванию.
Посылки между контроллерами не просто длинные, но еще требуют запрета прерываний ....
Еще большая проблема с ESP8266 и ESP32 - там еще и CORE меняют в части работы с прерываниями, что приводит порой либо к ошибкам компиляции, либо еще хуже к перезагрузке процессора.
Эти проблемы в основном удалось преодолеть. Как ни странно самым чувствительным к скорости обмена чрез дискретный вывод оказался ESP32 - оказалось иллюзией его высокое быстродействие - 240 мгц это для Wi-Fi, а как процессор он порой реально скатывается по быстродействию к AVR.
Так вот когда и WiFi работает (а он по прерываниям) , многие блок DS1820 испытывает трудности.
Похоже нашли хитроумный способ условного преодоления этих проблем, но это путем встраивания в библиотеку целого многоступенчатого планировщика обмена транзакциями с DS1820. Сейчас тестируем, если получится выложим в отдельной ветке.
--------
Таким образом введение еще одного прерывания с принудительным переключения задач, может порождать новый список проблем, он не короткий. Собственно часть из них схож и при работе с 2-я ядрами- требует специальных действий для избежания конфликтов.
Собственно почти все традиционные библиотеки работы с устройствами оказываются в зоне риска.
-------
Разработки AlexGyver основательны и интересны. И разработки других авторов.
Но как-то все грешат тем, что замалчивают о проблемах:
1.которые проявляются на разных контроллерах;
2.о встроенных тормозах - повсеместно используется delay() на значительные времена;
3.о возможных проблемах с прерываниями от одновременно работающих устройств разных разработчиков;
4.и порой просто о конфликтах с другими библиотеками.
-------
Как-то так об аккуратности использования прерываний на простых контроллерах без специальных операционных систем.
FreeRTOS проблем всех не решает, но добавляет новая.
-------
За предложенные решения спасибо - они полезны, интересны, помогают расширить кругозор о проблемах практического использования вроде бы простого устройства - контроллера под Arduino.
-------
Успехов.
Диспетчер задач by Alex Gyver
Добавлено: 28.08.2022{, 22:54}
Dryundel
Вот о чем человек написал? Про что эти нескончаемые тексты? Какое отношение они имеют к новому проекту топикстартера?
Складывается впечатление, что специально нагоняется пурга, что бы все поняли - все кроме разработок ecoins туфта и даже не стоит начинать.
А в конце, так ехидно:
ecoins писал(а): ↑28.08.2022{, 22:29}
Успехов.
Типа - ну-ну попробуй создать что то стоящее, а я поухмыляюсь и забью тему километровыми абстрактными текстами.
Может почистить все, что после первого поста? И дать возможность топикстартеру сделать нормальное описание.
Диспетчер задач by Alex Gyver
Добавлено: 29.08.2022{, 08:12}
Rovki
Предупрежден , значит вооружен . Вот и все ! Причем из практики ...А дальше пользователь решит, что ему использовать и к кому обращаться за помощью ,если что...
Автору поста отдельное спасибо за разнообразие и труд.
Диспетчер задач by Alex Gyver
Добавлено: 15.09.2022{, 22:53}
krom23
Phazz, спасибо, на первый взгляд вроде всё понятно, попробую. Кстати, не пора ли обновиться, вышла версия 1.2.1.
Диспетчер задач by Alex Gyver
Добавлено: 16.09.2022{, 09:46}
Dryundel
krom23 писал(а): ↑15.09.2022{, 22:53}
Кстати, не пора ли обновиться, вышла версия 1.2.1.
Просто скачайте новую библиотеку и удалите старую. Как правило блоки сделанные на предыдущих версиях библиотек AlexGyver, прекрасно работают и со свежими, в отличии от библиотек некоторых других авторов.
Диспетчер задач by Alex Gyver
Добавлено: 16.09.2022{, 10:39}
Phazz
Нумерация версии блока не имеет отношения к нумерации версии библиотеки.
Диспетчер задач by Alex Gyver
Добавлено: 16.09.2022{, 11:58}
krom23
Спасибо ребята, я так и понял/сделал. Пойду почитаю, что люди пишут, что написал Алекс, прочитал.
Диспетчер задач by Alex Gyver
Добавлено: 16.09.2022{, 12:47}
Rovki
Dryundel писал(а): ↑16.09.2022{, 09:46}
krom23 писал(а): ↑15.09.2022{, 22:53}
Кстати, не пора ли обновиться, вышла версия 1.2.1.
Просто скачайте новую библиотеку и удалите старую. Как правило блоки сделанные на предыдущих версиях библиотек AlexGyver, прекрасно работают и со свежими, в отличии от библиотек некоторых других авторов.
Успокойтесь уже наконец ,без грязных намеков ...И не говорите, что вас в очередной раз ни так поняли.
Диспетчер задач by Alex Gyver
Добавлено: 17.09.2022{, 20:38}
krom23
Rovki, вы писали в соседней теме, что используете блоки от ecoins без диспетчера задач. Какие блоки можно использовать таким образом? Просто я не в теме три года как. Вот думаю скрестить ужа с ежом, диспетчер от Alex Gyver, а блоки от "некоторых других авторов", раз уж они так хороши, с ваших слов.
Диспетчер задач by Alex Gyver
Добавлено: 17.09.2022{, 22:23}
Ingwar
krom23 писал(а): ↑17.09.2022{, 20:38}
Вот думаю скрестить ужа с ежом
Да, мне тоже очень любопытно увидеть реальный пример использования.
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 09:05}
Rovki
krom23 писал(а): ↑17.09.2022{, 20:38}
Rovki, вы писали в соседней теме, что используете блоки от ecoins без диспетчера задач. Какие блоки можно использовать таким образом? Просто я не в теме три года как. Вот думаю скрестить ужа с ежом, диспетчер от Alex Gyver, а блоки от "некоторых других авторов", раз уж они так хороши, с ваших слов.
Любые ,что есть в его примерах , с вопросами обращайтесь к автору этих блоков. Но помните ,могут быть проблемы с этим диспетчером ,работающий по прерываниям с теми блоками у которых длинная посылка и штатными коммуникациями которые также используют прерывания...
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 09:25}
Phazz
Rovki, вообще ни каких проблем с прерыванием и прочим не будет.
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 10:08}
Dryundel
Phazz, для кого то это действительно магия о том и предупреждение.
с вопросами обращайтесь к автору этих блоков. Но помните ,могут быть проблемы...
Как в сказке. "Но помни, ровно в полночь карета превратиться в тыкву!"
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 11:21}
Rovki
Dryundel писал(а): ↑18.09.2022{, 10:08}
Откуда: Сургут
Вы сюда сказки пришли читать?( флудить)
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 11:23}
Ingwar
Rovki писал(а): ↑18.09.2022{, 11:21}
Вы сюда сказки пришли читать?( флудить)
Впрочем как и вы))
Диспетчер задач by Alex Gyver
Добавлено: 18.09.2022{, 11:32}
Rovki
Phazz писал(а): ↑18.09.2022{, 09:25}
Rovki, вообще ни каких проблем с прерыванием и прочим не будет.
Уважаемый
Phazz, Проверьте простой пример - слейв есп ,мастер каскада (модбас ТСР) читает всего 1 переменную. 2 задача вывод константы в уарт на консоль , включите вывод данных на консоль
второй файл это проект на каскаде, другой нет , а вы можете использовать любую
Отправлено спустя 2 минуты 20 секунд:
Ingwar писал(а): ↑18.09.2022{, 11:23}
Rovki писал(а): ↑18.09.2022{, 11:21}
Вы сюда сказки пришли читать?( флудить)
Впрочем как и вы))
мне был задан вопрос ,я дал ответ , потом дал автору конкретный пример , адвокатов я не вызывал , тем более для флуда