私はEspeasyを使用していくつかの流量計を読み取っていますが、esp8266はこれに対して完全に正常に機能し、このバグはありません。 ただし、より多くのI / Oが必要であり、同じデバイスでESP32を使用しようとしました。 これらは、800パルス/リットルのホール効果フローセンサーです。 ht Generic Pulse Counterプラグインを使用して流量計に流量があるときはいつでも、ESP32がクラッシュし、再起動します
このメッセージで:
Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed)
私はこれを調査し、パルスチェックISRにIRAM_ATTRを追加し、millis()関数の呼び出しを削除することで、パルスをカウントし、クラッシュしないようにすることができることを発見しましたが、これによりデバウンスも削除されます。
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();
//}
}
IRAM_ATTRを追加するだけでも、割り込みを呼び出す流量計でクラッシュします。millis()関数の削除も必要でした。
ハードウェア:
ロリンD32
ESP Easyバージョン:platformioを使用して構築された最新のgitesp32test_1M8_partition。
ESP32にはGPIOを読み取るためのオプションがもっとたくさんあり、おそらくハードウェアのデバウンスオプションもあることを私は知っています。
したがって、GPIO状態を読み取るESP32用に別の関数を追加する必要があると思います。
ちなみに、このようなよく説明された問題レポートを見るのは良いことです:)
私もこのバグにぶつかりました。 回避策@thehijjtをありがとう!
@ TD-er、タイマーを修正する方法についてのヒントもありますか? 私はESP32の経験がほとんどありませんが、何らかの形で貢献できるかもしれません...
@viorels現時点では、ヒントはありません...まだ。
GPIO処理を修正することは、私たちがやることリストの上位にあることの1つであり、思ったほど簡単でシンプルですが、そうではないようです。 :(
しかし、ここ数週間/数か月間、HWウォッチドッグとWiFiの問題(おそらく関連する)を修正するのに非常に忙しかったので、このトピックで見たかったほど多くのアクティビティはありませんでした。
ご参考までに、
これはまったく同じ問題です。
https://github.com/espressif/arduino-esp32/issues/2758#issue -441733256
彼らの回避策は、millis()の代わりにmicros()を使用し、問題は解決します。
ESP32にはパルスカウンターが組み込まれています(そのうちの8つは私が信じています)#include "driver /pcnt.h"。 フィルタリングが含まれており、ソフトデバウンスを使用するよりも適していると思います。 現在、テストするesp32を持っていません。