Прошу дать совет, как правильно решить задачу отсчета времени(RTC) в Ардуино для ESP8266. Внешние RTC (DS3231 и пр.) не рассматриваем, только программно.
Самым разумным и простым в общем случае видится использование таймера, выдающего "тики" с определенной частотой, и подсчет этих "тиков" набором счетчиков, какие душе угодно (арифметика на уровне "плюс единичка и сравнение"). При этом без дополнительных вычислительных усилий можно получать "события"(флаги) с желаемой периодичностью. Казалось бы, в Ардуино для 8266 есть такие таймеры (библиотека Ticker, реализованная через os_timer SDK), все бы хорошо, но, видимо, при "тяжелых" приоритетных операциях (например, подключении к WiFi) эти программные таймеры "уходят"(и сильно!) по времени. Есть ещё "какой-то" hw_timer, но доступа к нему из Ардуино нет; кроме того, многие его вообще не рекомендуют использовать. Кстати, это так?
Остается только возможность использовать вполне точные micros(), millis() , напрямую связанные с недоступными приоритетными счетчиками. Но здесь при необходимости формирования "событий" приходится все время обращаться к этим функциям (polling) и анализировать (постоянно выполняя операции с 32-битной арифметики) прошедшие интервалы. Тяжело и непродуктивно как-то...
Как поступить в данном случае - ESP8266 и Arduino Core (на основе SDK 1.5.3)? Спасибо, если кто откликнется...
Самым разумным и простым в общем случае видится использование таймера, выдающего "тики" с определенной частотой, и подсчет этих "тиков" набором счетчиков, какие душе угодно (арифметика на уровне "плюс единичка и сравнение"). При этом без дополнительных вычислительных усилий можно получать "события"(флаги) с желаемой периодичностью. Казалось бы, в Ардуино для 8266 есть такие таймеры (библиотека Ticker, реализованная через os_timer SDK), все бы хорошо, но, видимо, при "тяжелых" приоритетных операциях (например, подключении к WiFi) эти программные таймеры "уходят"(и сильно!) по времени. Есть ещё "какой-то" hw_timer, но доступа к нему из Ардуино нет; кроме того, многие его вообще не рекомендуют использовать. Кстати, это так?
Остается только возможность использовать вполне точные micros(), millis() , напрямую связанные с недоступными приоритетными счетчиками. Но здесь при необходимости формирования "событий" приходится все время обращаться к этим функциям (polling) и анализировать (постоянно выполняя операции с 32-битной арифметики) прошедшие интервалы. Тяжело и непродуктивно как-то...
Как поступить в данном случае - ESP8266 и Arduino Core (на основе SDK 1.5.3)? Спасибо, если кто откликнется...