Dryundel писал(а): ↑19.08.2022{, 12:06}
Что то среднее между вашим планировщиком и FreeRTOS.Не правда ли?
ecoins, а может вам посмотреть в сторону FreeRTOS и его внедрением в FLProg? Там все гораздо интереснее. Очереди, семафоры, мьютексы...
Собственно первые наметки начал делать.
На новых контроллерах ESP стало нормой устанавливать адресный светодиод типа ws2812.
Библиотеки управления все основаны на FreeRTOS. И это понятно в силу особенности управления такими светодиодами.
Как бы полезно было бы сделать штатно такую функцию. Это в планах.
На STM32, RP2040 схожая ситуация, freertos присутствует.
-------------
Когда несколько лет мы начали изучать проблему почему тормозят проекты на FLProg мы начинали с рассматривания системы реального времени.
После того как появилось управления выполнения по платам по условиям, появилось то, что мы назвали значимо "Диспетчер задач", которая фактически является достаточно удачным переключателем между задачами.
Появление "Диспетчера" не решило проблемы, поскольку любая "тормозящая" задача может свести на нет результаты оптимизации по времени - например АЦП, почти все библиотеки работы с внешними устройствами, и даже алгоритм преобразования
float в int от FLProg в ModBus и пр.(последнее в контроллерах AVR очень тормозит).
Большинство библиотек от Arduino IDE написано с удобной для пользователя логикой - одна функция (строка) сразу приносит желаемый результат.
А внутри delay(), обмен через коммуникации, иногда громоздкие вычисления и прочие "плюшки", приводящие к задержкам.
Были разработаны методы проектирования библиотек - все библиотеки от ecoins построены на микрооперация - законченное конечное действие, после которого можно вернуть управление внешнему диспетчеру, сейчас это "Диспетчер задач".
Методы достаточно отработаны и уницифированы в том числе с учетом некоторых особенностей проектирования на FLProg.
По поводу семафоров и пр. - по моему мнению лучше всего этого избегать, иначе сложность управления этими процессами сами по себе поглощают ресурсы, в том числе и по быстродействию.
Могут возникать и конфликты - например при попытки нескольких задач одновременно использовать одну и ту же шину i2c.
К слову в непростой библиотеке LCD ecoins используется механизм блокировки вывода по флагу занятого дисплея.
---------------------
Тема очень интересная - если от разных участников форума будут локальные тестовые наработки, их можно будет объединить в универсальный результат.
При это все и по отдельности, и в связке будет полезно - "Диспетчер задач", многоядерность (там где она присутствует), и FreeRTOS.
------------------
Всем желаю успехов в развитии такой тематики.
Со своей стороны примем посильное участие.