Olá,
Estou realizando um projeto no qual utilizo Esp32, sendo os dois Processadores separadamente e dois canais de I2C (TwoWire), onde em cada processador utilizo um canal I2C.
O Processador Zero utilizo para rotinas de leitura de sensores através do canal I2C (INA219, BME680, ADS1115, DS1302), armazenando os valores em variáveis globais.
O Processador Um utilizo para as demais rotinas e controle do LCD e teclado ambos I2C e demonstração dos valores das variáveis globais.
Na compilação tudo da certo, porem depois de ligado o Esp32 ele funciona por alguns segundos e depois trava.
O I2C estou utilizando da seguinte forma:
TwoWire I2C_1 = TwoWire(0);
TwoWire I2C_2 = TwoWire(1);
I2C_1.begin(21, 22, 100000);
I2C_2.begin(15, 4, 100000);
Os Processadores estou criando da seguinte forma:
xTaskCreatePinnedToCore(CoreZero, "CoreZero", 16392, NULL, 5, NULL, 0);
delay(500);
xTaskCreatePinnedToCore(CoreOne, "CoreOne", 16392, NULL, 5, NULL, 1);
delay(500);
void loop() {
vTaskDelete(NULL);
}
Observação:
Os processadores sendo usados um um sem rotina no outro funciona perfeitamente, porem os dois ligado juntos não funciona.
Preciso de uma ajuda para tentar esclarecer o problema e para quem me ajudar a esclarecer darei um pagamento.
Obrigado.
Tags:
Olá.
Veja no monitor serial o que ele apresenta no travamento.
Suspeito de problemas relacionados a Watchdog.
Poste aqui a mensagem de erro que vem no monitor serial na travada (melhor se anexo como .txt).
Segue anexos.
Uma foto mostra o momento que esta em funcionamento e depois de alguns segundos apaga e trava.
Conto com vosso apoio.
Zap 35-99891-7692
Exatamente o que suspeitava.
Veja na primeira linha: "Interrupt wdt timeout on CPU0"
Isso é o Whatchdog timer.
Se vc não reinicializar ele de tempos em tempos ele entende que seu programa travou e reinicia.
Vale ver a doc:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-ref...
Leia também:
Edu eu uso a rotina de WDT porem ele não era para resetar, pois existem varias rotinas para ele executar e eu ate mensurei o tempo que levava para executar todas as rotinas juntas, dando um tempo de aproximadamente 500 ms.
void CoreZero( void * pvParameters ){
esp_task_wdt_init(4, true);
esp_task_wdt_add(NULL);
while(true) {
Relogio();
INA();
LeituraADS();
IAQ();
esp_task_wdt_reset();
}
}
O que eu posso fazer para resolver esse problema?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por