Первый вариант работы по таймеру реализовал через
Все было замечательно. Время с часов ds3231 отрабатывало без проблем. Когда пришел датчик SI7021. Я побаловался и решил его прописать в обработчике. И началось зависание ESP12F с постоянной перезагрузкой.
Начал разбираться и заметил, что при запросе данных с SI7021 происходит зависание ESP12F с дампом и перезагрузка. Самое страшное в этом всем, что пока не отключишь питание порт I2C будет висеть. Предположив, что таймер возможно работает как какое то прерывание, я сделал эмуляцию таймера в loop().
И теперь все работает.
Кто знает почему при использовании Ticker шина I2C виснет? Может надо какую команду прописать в timerIsr() типа начало и конец критической секции(в смысле захват устройств на монопольное использование и запрет прерываний). Походу Ticker и I2C используют какое то прерывание и виснут при одновременном обращении.
Код:
#include <Ticker.h>
Ticker Ticker1;
...
Ticker1.attach(1, timerIsr);
Начал разбираться и заметил, что при запросе данных с SI7021 происходит зависание ESP12F с дампом и перезагрузка. Самое страшное в этом всем, что пока не отключишь питание порт I2C будет висеть. Предположив, что таймер возможно работает как какое то прерывание, я сделал эмуляцию таймера в loop().
Код:
void loop() {
HTTP.handleClient();
if (millis() - job_ms > 1000) {
timerIsr();
job_ms = millis();
}
}
Кто знает почему при использовании Ticker шина I2C виснет? Может надо какую команду прописать в timerIsr() типа начало и конец критической секции(в смысле захват устройств на монопольное использование и запрет прерываний). Походу Ticker и I2C используют какое то прерывание и виснут при одновременном обращении.