概要
前回までに、基本的な機能については説明が終わりました。今回はAmazonが用意している「FreeRTOS カーネル 開発者ガイド」を読んでいきたいと思います。
FreeRTOS カーネル 開発者ガイドとは?
- https://docs.aws.amazon.com/ja_jp/freertos-kernel/latest/dg/about.html
上記のドキュメントでして、どこからリンクされているのかは不明です。。。
ブラウザでも見ることが可能ですが、PDFのリンクからファイルをダウンロードすることができます。ファイルの方が見出しがあるので、全体の把握がしやすかったです。
FreeRTOSの機能
一覧が載っていますが、わかりにくい機能はこれまでに説明したいと思います。ただしメモリの割当などはESP32の場合あまり気にする必要がなかったので、省略しています。
一覧をみて、気になる項目があれば、さらに読みすすめるのがよいと思います。
FreeRTOSのファイル
実際のソースファイルは上記の場所にあります。ただArduino CoreにリンクされているESP-IDFのバージョンはリリースによって変わるので注意してください。現在ESP-IDFの最新バージョンは4.0ですが、3.3系が使われているはずです。
- https://github.com/espressif/arduino-esp32/tree/master/tools/sdk/esp32/include/freertos/include/freertos
上記がArduino Coreで読み込んでいるファイルです。通常はこちらを確認すればよいと思います。
上記には私が一部翻訳したリファレンスがあります。
データ型およびコーディングスタイルガイド
変数名プレフィックス
種類 | プレフィックス | 例 |
ポインタ | p | int8_t *pcVal; |
符号なし | u | uint8_t uVal; |
char, int8_t | c | int8_t cVal; |
int16_t (short) | s | int16_t sVal; |
int32_t (long) | l | int32_t lVal; |
BaseTypet、その他 | x | BaseType_t xVal; |
関数名プレフィックス
戻り値 | プレフィックス | 例 |
void | v | void vFunc(); |
BaseType_t | x | BaseType_t xFunc(); |
void * | pv | void * pvFunc(); |
static | prv | static void prvFunc(); |
マクロ名プレフィックス
プレフィックス | リソースの定義場所 |
port (portMAXDELAY など) | portable.h または portmacro.h |
task (taskENTERCRITICAL() など) | task.h |
pd (pdTRUE など) | projdefs.h |
config (configUSEPREEMPTION など) | FreeRTOSConfig.h |
err (errQUEUEFULL など) | projdefs.h |
セマフォAPIは独自命名規則のようでした。
マクロ定義
マクロ | 値 |
pdTRUE | 1 |
pdFALSE | 0 |
pdPASS | 1 |
pdFAIL | 0 |
ヒープメモリ管理
ESP-IDFではFreeRTOSのメモリ管理は使っていないと思われます。
タスク管理
ざざっと目を通したほうがいいと思います。ただしESP32だとデュアルコア向けに拡張しているので注意しましょう。
キュー管理
こちらも目を通すと、より深く理解できると思います。
ソフトウェアタイマー管理
ESP32の場合にはハードウエアタイマーを利用するので、ソフトウエアタイマーは利用しません。ただし準備はされているので使うことはおそらく可能です。
割り込み管理
こちらも目を通すと、より深く理解できると思います。
リソース管理
こちらも目を通すと、より深く理解できると思います。
イベントグループ
FreeRTOS的には必須ではないオプション扱いです。あまり積極的に利用する必要はないですが、TCPスタックを自作したい場合などには便利なようです。
タスク通知
キューなど他の機能でも代用可能ですが、どのような場合に通知を使うべきかなどが記述されています。
その他の資料
おそらく、これまで紹介した情報以上のものは日本語ではありません。英語などで探す必要がありそうです。
まとめ
ESP32でFreeRTOSを使うときに、知っておくべきことはある程度紹介できたと思います。これ以上深く知るためにはFreeRTOSのソースコードを読み解く必要があると思います。
のちのち、中身も確認してみたいと思いますが入門としては、ここでいったん終わりにしたいと思います。
コメント