某ミニブログで、「Arduino - ESP32でdelay(1)を挿入してもWDTが入るので、delay(10)くらいにしないとダメだ!」みたいなのがリツィートされてきたけれど、そんな訳ない!
もしそんな状況であれば、みんな一度はやるGPIOでポートをバタバタさせる最大周波数は幾つ?なんて実験できなくなる。
試しにsetupの中とかで、なんにもしない無限ループとか入れてみればイイ。
ESP32はESP8266ではないので、delayへの依存性は無い。
※追記
上記の件はどうもCore0側の話で、 https://hamayan.blog.so-net.ne.jp/2018-02-21 でやった事だとは思う。
WDTにはいろんな種類があって、いきなりハードウエアリセットしてしまうものから、ソフトウエアの実行時間の上限及び下限を監視するものとかあり、上記リンクの場合はソフトウエアの実行時間の上限(または下限)設定に引っ掛かっているのではないだろうか?
この場合割り込みが入ってカーネル(特権モード)が上限を超えた事に対してなんらかのアクションを取る事になる、、、と思われる。
※エラーメッセージではCORE0側のIDLEタスクがリセットできなかった!となっているので、WDTリセットはIDLEタスクが行っている可能性が高い。
対策は、Wifiなどのシステム関連の処理を行っているであろうCore0側に傍若無人なプログラムを置かず、廻りと協調して動くことだと思う。可能な限りユーザーアプリケーションはCore1側で実行し、適切なタスク分割が必要でしょう。
もしそんな状況であれば、みんな一度はやるGPIOでポートをバタバタさせる最大周波数は幾つ?なんて実験できなくなる。
試しにsetupの中とかで、なんにもしない無限ループとか入れてみればイイ。
ESP32はESP8266ではないので、delayへの依存性は無い。
※追記
上記の件はどうもCore0側の話で、 https://hamayan.blog.so-net.ne.jp/2018-02-21 でやった事だとは思う。
WDTにはいろんな種類があって、いきなりハードウエアリセットしてしまうものから、ソフトウエアの実行時間の上限及び下限を監視するものとかあり、上記リンクの場合はソフトウエアの実行時間の上限(または下限)設定に引っ掛かっているのではないだろうか?
この場合割り込みが入ってカーネル(特権モード)が上限を超えた事に対してなんらかのアクションを取る事になる、、、と思われる。
※エラーメッセージではCORE0側のIDLEタスクがリセットできなかった!となっているので、WDTリセットはIDLEタスクが行っている可能性が高い。
対策は、Wifiなどのシステム関連の処理を行っているであろうCore0側に傍若無人なプログラムを置かず、廻りと協調して動くことだと思う。可能な限りユーザーアプリケーションはCore1側で実行し、適切なタスク分割が必要でしょう。