Espeasy: ESP32 Interrupt/Millis() Probleme

Erstellt am 21. Okt. 2018  ·  4Kommentare  ·  Quelle: letscontrolit/ESPEasy

Ich verwende einen Espeasy, um einige Durchflussmesser abzulesen, der esp8266 funktioniert dafür einwandfrei und hat diesen Fehler nicht. Ich brauchte jedoch mehr E / A und versuchte, den ESP32 mit den gleichen Geräten zu verwenden. Es handelt sich um Hall-Effekt-Durchflusssensoren mit 800 Impulsen/Liter. Jedes Mal, wenn ein Durchfluss auf dem Durchflussmesser mit dem ht Generic Pulse Counter-Plugin vorhanden ist, stürzt der ESP32 ab und startet neu
mit dieser Meldung:
Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed)

Ich habe dies recherchiert und festgestellt, dass ich sie dazu bringen kann, Pulse zu zählen und nicht abzustürzen, indem ich IRAM_ATTR zum Pulsprüf-ISR hinzufüge und den Aufruf der millis ()-Funktion entferne. Dies entfernt jedoch auch jede Entprellung.

void IRAM_ATTR Plugin_003_pulsecheck(byte Index)
{
  //const unsigned long PulseTime=timePassedSince(Plugin_003_pulseTimePrevious[Index]);
  //if(PulseTime > (unsigned long)Settings.TaskDevicePluginConfig[Index][0]) // check with debounce time for this task
  //{
        Plugin_003_pulseCounter[Index]++;
        Plugin_003_pulseTotalCounter[Index]++;
  //    Plugin_003_pulseTime[Index] = PulseTime;
  //    Plugin_003_pulseTimePrevious[Index]=millis();
  //}
}

Das einfache Hinzufügen von IRAM_ATTR stürzt immer noch auf dem Durchflussmesser ab, der den Interrupt aufruft, die Entfernung der millis()-Funktion war ebenfalls erforderlich.

Systemkonfiguration

Hardware:
Lolin D32

ESP Easy-Version: neuestes git esp32test_1M8_partition, erstellt mit Platformio.

Plugin ESP32 Bug

Alle 4 Kommentare

Ich weiß, dass der ESP32 viel mehr Optionen zum Lesen von GPIO hat und vielleicht sogar eine Hardware-Entprell-Option hat.
Ich denke also, wir sollten eine separate Funktion für das ESP32 hinzufügen, das den GPIO-Status liest.

Übrigens, schön einen so gut beschreibenden Problembericht zu sehen :)

Ich habe diesen Fehler auch getroffen. Danke für die Problemumgehung @thehijjt !
@TD-er, irgendwelche Tipps, wie man auch den Timer repariert? Ich habe wenig Erfahrung mit ESP32, aber vielleicht kann ich irgendwie dazu beitragen...

@viorels Im Moment habe ich keinen Tipp ... noch.
Das Reparieren des GPIO-Handlings ist eines der Dinge, die wir wirklich ganz oben auf der To-Do-Liste haben, und so einfach / einfach es klingt, ist es anscheinend nicht. :(
Aber in den letzten Wochen/Monaten war ich wirklich damit beschäftigt, die HW-Watchdog- und WiFi-Probleme (wahrscheinlich damit verbunden) zu beheben, daher gab es zu diesem Thema nicht so viel Aktivität, wie ich es mir gewünscht hätte.

Zu Ihrer Information,
Dieses Problem ist genau das gleiche Problem.
https://github.com/espressif/arduino-esp32/issues/2758#issue -441733256
Ihre Problemumgehung verwendet micros() anstelle von millis(), und das Problem verschwindet.

Der ESP32 hat eingebaute Impulszähler (8 davon glaube ich) #include "driver/pcnt.h". Ich glaube, dass sie eine Filterung beinhalten und besser passen als eine weiche Entprellung. Ich habe derzeit kein esp32 zum Testen bei mir.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

tedenda picture tedenda  ·  6Kommentare

workgroupengineering picture workgroupengineering  ·  6Kommentare

DittelHome picture DittelHome  ·  5Kommentare

wolverinevn picture wolverinevn  ·  4Kommentare

MarceloProjetos picture MarceloProjetos  ·  4Kommentare