現在実用ガイドを読みながら編集中、、、書いて有る事を信用しない様に!
http://www.profdong.com/elc4438_spring2016/USINGTHEFREERTOSREALTIMEKERNEL.pdf
ESP32はRTOSができるらしい、、、
仕様書を読み進めてIDLEタスクのところまで来たので、IDLEタスクについて読んだ事をまとめてみよう。
前にも書いたけれどμiTRONと同様FreeRTOSでも、なにも実行すべきタスクが存在しない時、IDLEタスクに落ちてくる。具体的には1つもREADY状態のタスクが存在しないときである。
IDLEタスク自体もタスクの一部であり、優先度はもっとも低く(0)設定されている。
優先度は最低なので、IDLEタスクを実行中に別のタスクがREADYに遷移すれば、即座にプリエンプトされてしまう。
当然ESP32でもこのIDLEタスクが走っている、、、はず。
FreeRTOSではIDLEタスクに入る時にIDLE HOOKと言う機能を有効にすることができる。
IDLE HOOKは特定の名前の関数を生成すれば、それを呼び出してくれるコールバック機能である。
関数名は指定されていて、
となる。うーん、できれば関数アドレスを登録する方法にして欲しい。
ESP32 Arduinoで実際にやってみると、とくにコンパイルエラーは出ないものの、vApplicationIdleHook関数自体は呼ばれていない気がする。
IDLE HOOK機能を有効とする為にはFreeRTOSConfig.hのconfigUSE_IDLE_HOOKを1にしないといけないのだが、ESP32では以下の様に記述されている。
#define configUSE_IDLE_HOOK ( CONFIG_FREERTOS_LEGACY_IDLE_HOOK )
そしてこのCONFIG_FREERTOS_LEGACY_IDLE_HOOKが見つからない。
できれば有効にして欲しいなぁ、、、
IDLE HOOK機能を有効とする為には上記定義を有効にして、ライブラリのリコンパイル?が必要と思われるが、サポートされていないのだろうか?
IDLE HOOK機能を有効とすると何が嬉しいのか?しばしばマルチタスクを構築した時に処理を突っ込み過ぎると優先度の低いタスクにCPU時間が与えられず、行われるべき処理が実行されない現象が発生する。
IDLEタスクは最低の優先度のタスクなので、ここに来ないと言う事は上記現象が発生している可能性がある。それを知る為の1つの方法として、IDLE HOOKを使う事ができる。
ESP32では、どうもWDTクリアをIDLEタスクで行っている様な気がする。
![ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発 ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発]()
![リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17)) リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))]()
http://www.profdong.com/elc4438_spring2016/USINGTHEFREERTOSREALTIMEKERNEL.pdf
ESP32はRTOSができるらしい、、、
仕様書を読み進めてIDLEタスクのところまで来たので、IDLEタスクについて読んだ事をまとめてみよう。
前にも書いたけれどμiTRONと同様FreeRTOSでも、なにも実行すべきタスクが存在しない時、IDLEタスクに落ちてくる。具体的には1つもREADY状態のタスクが存在しないときである。
IDLEタスク自体もタスクの一部であり、優先度はもっとも低く(0)設定されている。
優先度は最低なので、IDLEタスクを実行中に別のタスクがREADYに遷移すれば、即座にプリエンプトされてしまう。
当然ESP32でもこのIDLEタスクが走っている、、、はず。
FreeRTOSではIDLEタスクに入る時にIDLE HOOKと言う機能を有効にすることができる。
IDLE HOOKは特定の名前の関数を生成すれば、それを呼び出してくれるコールバック機能である。
関数名は指定されていて、
/* Idle hook functions MUST be called vApplicationIdleHook(), take no parameters, and return void. */ void vApplicationIdleHook( void ) { /* user program */ }
となる。うーん、できれば関数アドレスを登録する方法にして欲しい。
ESP32 Arduinoで実際にやってみると、とくにコンパイルエラーは出ないものの、vApplicationIdleHook関数自体は呼ばれていない気がする。
IDLE HOOK機能を有効とする為にはFreeRTOSConfig.hのconfigUSE_IDLE_HOOKを1にしないといけないのだが、ESP32では以下の様に記述されている。
#define configUSE_IDLE_HOOK ( CONFIG_FREERTOS_LEGACY_IDLE_HOOK )
そしてこのCONFIG_FREERTOS_LEGACY_IDLE_HOOKが見つからない。
できれば有効にして欲しいなぁ、、、
IDLE HOOK機能を有効とする為には上記定義を有効にして、ライブラリのリコンパイル?が必要と思われるが、サポートされていないのだろうか?
IDLE HOOK機能を有効とすると何が嬉しいのか?しばしばマルチタスクを構築した時に処理を突っ込み過ぎると優先度の低いタスクにCPU時間が与えられず、行われるべき処理が実行されない現象が発生する。
IDLEタスクは最低の優先度のタスクなので、ここに来ないと言う事は上記現象が発生している可能性がある。それを知る為の1つの方法として、IDLE HOOKを使う事ができる。
ESP32では、どうもWDTクリアをIDLEタスクで行っている様な気がする。

ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発
- 出版社/メーカー: オーム社
- 発売日: 2005/04/23
- メディア: Kindle版

リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))
- 作者: 高田 広章
- 出版社/メーカー: CQ出版
- 発売日: 2004/02
- メディア: 単行本