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.
-------
Успехов.