SSブログ

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

現在実用ガイドを読みながら編集中、、、書いて有る事を信用しない様に!
http://www.profdong.com/elc4438_spring2016/USINGTHEFREERTOSREALTIMEKERNEL.pdf

アマゾンがFreeRTOSをまるっと買い取って、MITライセンスで公開しているんですね。かつてIT企業がここまで組み込みに絡んでくるなんて想像もできませんでした。これを機会にFreeRTOSの勉強をせねばならんかのぅ、、、
https://aws.amazon.com/jp/freertos/

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

FreeRTOSについて調べる

FreeRTOSのヘッダーファイルとしては、
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
が有る。Arduino環境では特にインクルードしなくても大丈夫。

○タスク状態
μiTRONならタスク状態として以下のものがある。
1.実行状態(RUNNING)
ある瞬間、1つのコアで実際に動いているタスクは1つであり、そのタスクのみ取り得る状態。

2.実行可能状態(READY)
カーネルによっていつでも実行状態に遷移可能な状態。

3.広義の待ち状態
なんらかの条件によって実行状態に遷移されない状態、条件によって以下の3つの状態を持つ。
3.1.待ち状態(WAITING)
自分自身がなんらかの条件を待つとして遷移。例えば時間待ちなどを行っている状態。
3.2.強制待ち状態(SUSPENDED)
他のタスクによって強制的に実行を中断された状態。また自分自身でこの状態に入る事ができる。
3.3.二重待ち状態(WAITING-SUSPENDED)
WAITING中に、他のタスクによってSUSPENDEDさせられた状態。どちらかの条件が解除されると、WAITINGまたはSUSPENDEDに遷移する。

4.休止状態(DORMANT)
タスクの管理情報等が登録されているが、まだタスクが起動していない状態。または、起動していたタスクが停止した状態。

5.未登録状態(NON-EXISTENT)
タスクがまだ生成されていないか、タスクそのものが管理情報ごと削除された状態。

μiTRONでは、これら複数の状態が存在するが、主に1の実行状態、2の実行可能状態、3の待ち状態の中を、それぞれのタスクがグルグル回っている事になる。

FreeRTOSのタスク状態を見てみると、大きく以下の2つを持つ。
(1) 実行状態(RUNNING)
ある瞬間、1つのコアで実際に動いているタスクは1つであり、そのタスクのみ取り得る状態。

(2) 非実行状態(NOT-RUNNING)
実行状態以外の状態。もちろんμiTRON同様非実行状態の中身は、複数の状態を持つ。

●非実行状態(NOT-RUNNING)
非実行状態は複数の状態を持つ。
(1) READY
μiTRONで言うところのREADYであり、RUNNING中のタスクが実行を停止した時、カーネルによって優先度を元に実行をスケジュールされ、もっとも優先度が高ければRUNNINGに遷移する。

(2) BLOCKED
これは何かの条件を待っている状態であり、条件が解除されればいつでもREADYに遷移できる。
BLOCKEDの状態も2つの場合が有り、1つはTEMPORAL EVENTS、1つはSYNCHRONIZATION EVENTSとなる。
1) TEMPORAL EVENTSは、時間待ち、例えばvTaskDelay関数(ESP Arduinoではdelay関数)を呼んだその時点からの相対時間。またはvTaskDelayUntil関数を使った絶対時間となる。
2) SYNCHRONIZATION EVENTSは、他のタスクや割込み等に同期して待ち状態が解除されるもので、キュー(DATA QUEUE)待ちなどである。

(3) SUSPENDED
この状態に入る唯一の方法は、 vTaskSuspend関数の実行であり、この状態から抜ける方法は vTaskResume関数の実行、または xTaskResumeFromISR関数の実行となる。

●タスク状態遷移解説
freeRTOS_001.png

(1) 現在実行中のタスク(RUNNING)は、自らvTaskSuspend関数を呼んでSUSPENDEDに入る。または時間待ちやタスク間同期の為にBLOCKEDに入る。または、現在実行中のタスクよりも優先度の高いタスクの実行が必要となった時、カーネルによってREADYに遷移させられる!。

(2) BLOCKEDに居るタスクは、なんらかのイベントでREADY状態に遷移する。なんらかのイベントとは、例えば指定時間が経過したとか、別のタスクからデータが送られて来たとか、共有リソースの使用権を得たとか、割込みから起床されたとかである。
また、現在実行中のタスクや割込みなどからvTaskSuspend関数で強制的にSUSPENDEDに遷移させられる事もある。

(3) SUSPENDEDは、現在実行中のタスクや割込みなどからvTaskSuspend関数で強制的にSUSPENDEDに遷移させられる。または現在実行中のタスクが自ら入る事もある。この状態からREADY状態に遷移する為には、現在実行中のタスクや割込みなどからvTaskResume関数を呼んでもらう必要がある。

ここでμiTRONの状態遷移を見てみると、
freeRTOS_002.png

用語に多少の違いは有れど、まぁ似た様な遷移を行う事が判る。スレッドモデルのRTOSなら、だいたい似通ってくるのでしょう。
※ディスパッチはREADY状態からRUNNING状態に遷移する事。プリエンプトはその逆方向を示す。この2つの状態遷移は、その時点のタスクの優先度を元にカーネルによって行われる。



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

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

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