SSブログ

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

※コードにミスが有ったので、修正。

ESP32はRTOSができるらしい、、、

前回は1つのタスクのみ生成したのですが、マルチタスク感が全くしないので、もっとタスクを増やしてみよう。
と言っても込み入ったプログラムを書くのは面倒なのでなるべく簡単に。
前回のプログラムからの変更点のみ記載。

https://github.com/hamayanShowa-ele/ArduinoShare/tree/main/ESP32freeRTOS_TASK_ID_002

TaskHandle_t taskHandle[4];  /* typedef void * TaskHandle_t; */
const int ledPin = 2;

void setup()
{
  Serial.begin( 115200 );

  /* configure led blink task. */
  unsigned long executeParameter = 1000UL;  /* delay time */
  xTaskCreatePinnedToCore(
    ledBlinkTask,  /* task name */
    "ledBlinkTask 01",   /* task name string */
    1024,           /* stack size */
    &executeParameter, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    &taskHandle[0],   /* task handle pointer */
    1              /* core ID */
  );

  executeParameter = 149UL;  /* delay time */
  xTaskCreatePinnedToCore(
    ledBlinkTask,  /* task name */
    "ledBlinkTask 02",   /* task name string */
    1024,           /* stack size */
    &executeParameter, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    &taskHandle[1],   /* task handle pointer */
    1              /* core ID */
  );

  executeParameter = 257UL;  /* delay time */
  xTaskCreatePinnedToCore(
    ledBlinkTask,  /* task name */
    "ledBlinkTask 03",   /* task name string */
    1024,           /* stack size */
    &executeParameter, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    &taskHandle[2],   /* task handle pointer */
    1              /* core ID */
  );

  executeParameter = 331UL;  /* delay time */
  xTaskCreatePinnedToCore(
    ledBlinkTask,  /* task name */
    "ledBlinkTask 04",   /* task name string */
    1024,           /* stack size */
    &executeParameter, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    &taskHandle[3],   /* task handle pointer */
    1              /* core ID */
  );
}


1.4つのタスクを起動する為、TaskHandle_t構造体の配列を4に増やした。

2.setup内の関数xTaskCreatePinnedToCoreを4タスク分記載した。内容は4つほぼ同じだが、実行時引数を適当に変えた。

※前回のプログラムでは2秒周期でLEDの点滅が行われていたが、今回のプログラムではランダムにLEDが点滅する。これはそれぞれのタスクが1つのLEDを共有し、それぞれ勝手に出力を変えているから。

※マルチタスクではしばしば例題になるけれど、コードと実行コンテキストは一致しない。この事は例えばESP32はネットワーク機能が強力で、それを利用してESP32上にWEBサーバー等を構築したい場合、同時に複数のWEBサービスを容易に構築する事ができる。

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:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

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

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