Estou tentando resolver um problema num projeto baseado no Arduino do ESP32 operando como Webserver, onde sempre que a conexão de Wifi com o cliente cai, estranhamente o programa no microcontrolador se congela por aproximadamente 1s, variando.
No loop() roda apenas o manipulador de cliente WebSocketsServer() e um intertravamento que precisa operar 'realtime', resumidamente:
- Código: Selecionar todos
void loop(void) {
webSocketsServer();
Interlock();
}
Aparentemente, a reconexão fica presa num loop, travando o processo seguinte, que deveria responder imediatamente á mudança do valor do sensor que no processo tem uma tolerancia de digamos 0,1s.
Numa das tentativas que fiz foi colocar o Interlock() na interrupção do timer e não funcionou abaixo de uma certa temporização, mas quando acidentamente o esqueci lá e mantive no loop() (sem comentar), o proloblema diminuiu bastante; ou seja, no travamento do
webSocketsServer()
no loop, a interrupção cobriu a ausencia do Interlock()
no loop principal, ficando agora essa rotina sendo chamada em 2 lugares:- Código: Selecionar todos
ISR_Timer() {
Interlock();
}
Por acaso, não há nenhuma variável local nessa rotina, apenas global.
Gostaria de confirmar se essa abordagem é incomum, ou se essa seria a solução padrão.
Algo parece estar me escapando, achei muito exótico.