SSブログ

ESP32でマルチタスクを行う為の、とりあえずここまで判った事 by freeRTOS 9タスク目 [ESP32]

今回は実験

ESP32 Arduinoではいったい誰がWDTをリセットしているのか?いろいろもやもやしているので、ちょっと実験してみる。以下の様なコードを書いてみた。
const int ledPin = 2;

void setup()
{
  Serial.begin( 115200 );
  Serial.println( "FreRTOS Test." );
  pinMode( ledPin, OUTPUT );
  digitalWrite( ledPin, LOW );  /* turn off led. */

  /* configure led blink task. */
  xTaskCreatePinnedToCore(
    task1,  /* task name */
    "",   /* task name string */
    1024,           /* stack size */
    NULL, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    NULL,   /* task handle pointer */
    0              /* core ID */
  );
}

void loop()
{
  while( 1 ) {}
}

/* task1 */
void task1( void *execParam )
{
  while( 1 )
  {
    digitalWrite( ledPin, ( digitalRead(ledPin) ) ? LOW : HIGH );  /* toggle led. */
//    delay( 1 );
  }
}

試してみたいのは、タスク優先度とコアIDを変化させた場合である。task1、loop共に無限ループに入る。同一優先度のタスク間ではラウンドロビンが行われる。
無限ループの中では別のタスクをディスパッチさせるようなコードを書いていないので、優先度によってはタスクがコアを占有してしまう。※割り込みは除く
※task1内でLEDは高速に点滅するので、点きっぱなし比べれば暗く光る事になる。

(1) task1の優先度を2、コアIDを1とした場合、とくに問題無く暗く点く。

(2) task1の優先度を1、コアIDを1とした場合、更に暗くなったような気がする。

(3) task1の優先度を0、コアIDを1とした場合、点かない。

(4) task1の優先度を2、コアIDを0とした場合、LEDは点くがシリアルモニターから謎のメッセージが周期的に出力される。
esp32_WDT_Message_002.png


(5) task1の優先度を1、コアIDを0とした場合、(4)と変わらず。

(6) task1の優先度を0、コアIDを0とした場合、(4)と変わらず。

(7) task1の優先度を2、コアIDを0とし、delay(1)を入れたら謎のメッセージは出なくなった。

それぞれの結果について検討してみると、
(1) の結果はtask1がコア1を占有的に使用している状態。

(2) の結果はtask1とloopTaskがラウンドロビンしている状態。

(3) の結果はtask1にCPU時間が与えられず、loopTaskがコア1を占有している状態。

(4)、(5)、(6) 謎のメッセージは「watchdogはトリガーされた。次のタスクは時間内にwatchdogをリセットできなかった - IDLE(CPU 0)」
プログラムが起動するとシリアルから起動メッセージを出すようにしているけれど、そのメッセージは出力されていないので、状況から考えるとWDTのリセットタイミングが間に合わなかったとしても、いきなりリセットされる訳ではなさそうだ。

(7) delay(1)を挿入する事で、コア0側でバックグランドで動いている謎のプログラムにもCPU時間が与えられたので、watchdogのリセット処理が行えたと言う事なのだろう。

※RTOSを実装する事が一般的な現代的なマイコンでは、watchdog自体も幾つかの種類があり、ユーザーアプリケーション等のCPU占有時間(上限の場合も、下限の場合も)の監視目的の物もある。

※この話の後日談
https://hamayan.blog.so-net.ne.jp/2019-01-29


ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発

  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/23
  • メディア: Kindle版



図解 μITRONによる組込みシステム入門(第2版)

図解 μITRONによる組込みシステム入門(第2版)

  • 作者: 武井 正彦
  • 出版社/メーカー: 森北出版
  • 発売日: 2018/02/17
  • メディア: 単行本(ソフトカバー)



μITRON4.0標準ガイドブック

μITRON4.0標準ガイドブック

  • 作者:
  • 出版社/メーカー: パーソナルメディア
  • 発売日: 2001/11/01
  • メディア: 単行本(ソフトカバー)



リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))

リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))

  • 作者: 高田 広章
  • 出版社/メーカー: CQ出版
  • 発売日: 2004/02
  • メディア: 単行本



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

nice! 0

コメント 0

コメントを書く

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

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

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