So-net無料ブログ作成

ESP32のdelay挿入。そんな訳はない [ESP32]

某ミニブログで、「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側で実行し、適切なタスク分割が必要でしょう。

別にdelay(vTaskDelay)でなくてもfreeRTOSが提供しているAPIの内、待ち状態に遷移するAPI(イベント待ちとか、セマフォとか、データキューとか色々)を利用すればIDLEタスクにCPU時間が与えられる可能性が高くなるので、積極的にfreeRTOSのAPIを利用して行こう!

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。