Página 1 de 1

Rotina sendo chamada no LOOP e no ISR?

MensagemEnviado: 18 Out 2019 21:25
por andre_luis
Olá pessoal,

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.

Re: Rotina sendo chamada no LOOP e no ISR?

MensagemEnviado: 19 Out 2019 07:37
por tcpipchip
Opa, estranho, pois nao tive este problema com o ESP32.

Tentou colocar ele para rodar em 240Mhz ?

Re: Rotina sendo chamada no LOOP e no ISR?

MensagemEnviado: 19 Out 2019 09:00
por andre_luis
tcpipchip escreveu:Opa, estranho, pois nao tive este problema com o ESP32.

Tentou colocar ele para rodar em 240Mhz ?


Tambem nunca havia precebido isso poruqe ate entao as aplicacoes que trabalhei com esse uC nao tinham requisitos de reacao tao rapida, e alem disso aplicacoes clientes nao desconectavam com tanta frequencia como nesse caso onde a placa fica num ambiente ruidoso, daqui meus testes sao com o ESP a menos de meio metro do Laptop e la fica numa fabrica, dentro de um gabinete.

Pelo que vi, atualmente esta operando em 80Mhz, mas no que quadruplicando a frequencia da cpu iria ajudar ? O problema nao parece ser de processamento, mas de como a biblioteca lida com a perda da conexao com o cliente ou com a rede .

Re: Rotina sendo chamada no LOOP e no ISR?

MensagemEnviado: 19 Out 2019 12:58
por tcpipchip
mas mudou para 240Mhz ?
E estas usando Arduino via Platormio ? Eclipse ou o classico ?