2022年4月15日金曜日

M5Stack Basic上(ESP32)のinterruptで大苦戦

ご無沙汰しております。

interruptを使って、PWM入力のデューティー比を計測するという簡単なプログラムでハマりました。

IRAM_ATTRとかvolatileとか、Serial, delayを使わない、なんてのは当然やってます。でも、

  • Interrupt wdt timeout on CPU1 
  • LoadProhibited
  • Coprocessor exception

でrestartしちゃう。M5関連のコードを外してESP32 DevKitで動かしたり、structで定義していたものを単純変数に置き換えたり、メインループで使っているSoftwareSerialをHardwareSerialに変えてみたり。

何をやっても駄目。

最終的に動いたのですが……

対策は……浮動小数点を使わない……でした。

わけがわからないよ……。

2 件のコメント:

  1. 私はESP32の割り込みで、switch文があるとだめで if ... else if .... else に書き換えたら動いた経験があります。

    返信削除
    返信
    1. コメントありがとうございます。

      えええ、それもまた見つけにくいですね。
      まさかSwitchが関係するなんて思わないから、ずっと悩み続けそうです……。

      削除

注: コメントを投稿できるのは、このブログのメンバーだけです。