ESP32でマルチタスクを行う為の、とりあえずここまで判った事 by freeRTOS 2タスク目 [ESP32]
※コードにミスが有ったので、修正。
ESP32はRTOSができるらしい、、、
前回は1つのタスクのみ生成したのですが、マルチタスク感が全くしないので、もっとタスクを増やしてみよう。
と言っても込み入ったプログラムを書くのは面倒なのでなるべく簡単に。
前回のプログラムからの変更点のみ記載。
https://github.com/hamayanShowa-ele/ArduinoShare/tree/main/ESP32freeRTOS_TASK_ID_002
1.4つのタスクを起動する為、TaskHandle_t構造体の配列を4に増やした。
2.setup内の関数xTaskCreatePinnedToCoreを4タスク分記載した。内容は4つほぼ同じだが、実行時引数を適当に変えた。
※前回のプログラムでは2秒周期でLEDの点滅が行われていたが、今回のプログラムではランダムにLEDが点滅する。これはそれぞれのタスクが1つのLEDを共有し、それぞれ勝手に出力を変えているから。
※マルチタスクではしばしば例題になるけれど、コードと実行コンテキストは一致しない。この事は例えばESP32はネットワーク機能が強力で、それを利用してESP32上にWEBサーバー等を構築したい場合、同時に複数のWEBサービスを容易に構築する事ができる。
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で始める組み込み開発
- 出版社/メーカー: オーム社
- 発売日: 2005/04/23
- メディア: Kindle版
リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))
- 作者: 高田 広章
- 出版社/メーカー: CQ出版
- 発売日: 2004/02
- メディア: 単行本
2018-02-17 17:32
nice!(0)
コメント(0)
コメント 0