FreeRTOSは?FreeRTOSの主要機能と役割の全体像【初心者向け】

FreeRTOS

この記事でわかること

  • FreeRTOS にはどんな機能があるのか
  • 各機能が「何のために存在するのか」
  • Queue / Semaphore / EventGroup を理解するための前提知識
  • FreeRTOS を学ぶ正しい順番
  • 次に読むべき記事の道筋

はじめに

マイコンを使ってIoTで何かを作りたい!そんなことを考えたときに直面するのがRTOSを使用しなければならないことだと思います。私の場合、標準で無線通信(wifiなど)が使えるESP32を使用して何かを作りたいと考えましたが、ESP32に標準で使用できる FreeRTOSってなに?といった状態でした。

この記事では、私と同じように「FreeRTOS ってなに?」
「そもそも何を解決するための仕組み?」 という視点で整理し、
全体像を一度で把握できるようにします。


FreeRTOSとは何か

FreeRTOS は、

複数の処理(タスク)を、 決められたルールで安全に同時実行するためのリアルタイムOS

です。

ESP32 では FreeRTOS が内部で常に動作しており、
Arduino スケッチも実質的には FreeRTOS 上で実行されています。

重要なのは、FreeRTOS は
「便利な関数集」ではなく、処理を安全に分離・連携させるための仕組み
だという点です。


なぜ FreeRTOS は分かりにくいのか

FreeRTOS が難しく感じられる理由は主に次の3つです。

1. 機能が多い

タスク、Queue、Semaphore、EventGroup、Timer、メモリ管理など、
一度に多くの概念が登場します。

2. 似たような機能が存在する

「待つ」「通知する」「同期する」といった動作が、
複数の機能で実現できてしまいます。

3. 使い分けの前提が説明されない

公式ドキュメントは正確ですが、
どの場面で何を選ぶべきか までは踏み込んでいません。

その結果、

「動くコードは書けるが、設計として正しいか分からない」

という状態になりがちです。


FreeRTOSの機能を「役割」で整理する

FreeRTOS の機能は、役割ごとに整理すると非常に分かりやすくなります。

FreeRTOS 機能マップ(役割別)

役割主な機能何を解決するか
処理の分離Task処理を独立させる
データ受け渡しQueueタスク間で値・イベントを渡す
資源の保護Semaphore / Mutex同時アクセスを防ぐ
状態の通知EventGroup複数条件の成立を待つ
連続データMessageBuffer / StreamBufferバイト列・ストリーム処理
時間制御Software Timer定期処理・遅延実行

この記事ではそれぞれの機能を大まかに説明し、詳細に関しては別の記事で取り上げようと思います。


各機能の役割をざっくり理解する

Task(タスク)

  • FreeRTOS における処理の単位
  • 1つの仕事を1つのタスクとして分離する
  • ESP32 では複数タスクが同時に動作する

👉 処理を分けるための機能


Queue(キュー)

  • タスク間でデータやイベントを受け渡す
  • FIFO(先入れ先出し)
  • 値はコピーされて保持される

👉 イベントやデータを伝えるための機能

※ Queue は後続の記事で詳しく解説します。


Semaphore / Mutex(セマフォ・ミューテックス)

  • 共有リソースへの同時アクセスを防ぐ
  • UART、I2C、SPI、SDカードなどを保護する

👉 壊れないように守るための機能


EventGroup(イベントグループ)

  • 複数の条件がそろうのを待つ
  • 状態管理に向いている

👉 状態を待つための機能


MessageBuffer / StreamBuffer

  • 連続したデータ(バイト列)を扱う
  • 通信データやストリーム処理向け

👉 流れるデータを扱う機能


Software Timer

  • 一定時間後・一定周期で処理を実行
  • タスクを増やさずに時間制御が可能

👉 時間を基準に動かすための補助機能



IoT設計での典型的な構成例

IoT システムでは、次のような構成が一般的です。

センサー読み取り(Task)
   ↓ Queue
データ処理(Task)
   ↓
通信 / ログ保存(Task)
  • センサー値の通知 → Queue
  • I2Cアクセス → Semaphore
  • 通信完了待ち → EventGroup
  • 定期処理→Timer

FreeRTOS の機能は、
単体ではなく組み合わせて使うことが前提です。


グローバル変数ではなぜ足りないのか

グローバル変数は、

  • 最新の状態しか持てない
  • 更新の履歴が消える
  • 排他制御が必要
  • バグが再現しにくい

といった問題を抱えています。

FreeRTOS の機能は、
これらの問題を最初から防ぐために用意された仕組みです。


初心者がまず理解すべき優先順位

最初からすべてを理解する必要はありません。
おすすめの学習順は次の通りです。

  1. Task
  2. Queue
  3. Semaphore
  4. EventGroup
  5. MessageBuffer / StreamBuffer
  6. Software Timer

この順で学ぶと、混乱せず理解が進みます。記事もこの順で出していこうと思っています。
時間があるときに頑張りますので、気長に待っていただけますと助かります。


次に読むべき記事

この記事は FreeRTOSの全体像をつかむための入口 です。
次は、基本的な機能である Task について詳しく解説していきます。

  • FreeRTOS Taskとは何か(設計視点で理解する)
  • 使用するメリット
  • ESP32で動く実装例
  • 設計視点での使いどころ

👉 次の記事:FreeRTOS Taskとは何か?処理の分離を設計視点で理解する


まとめ

  • FreeRTOS は機能が多いが、役割で整理すれば理解しやすい
  • Task は処理の単位
  • Queue はイベント共有
  • Semaphore は資源保護
  • EventGroup は状態管理
  • IoT設計ではこれらを組み合わせて使う

まずは 全体像を押さえること が最重要です。


f-techforge

ESP32・FreeRTOSを中心に
IoT開発を実装ベースで解説。

Qiitaでも技術記事を執筆中。
本ブログでは、より深い解説を掲載しています。

Qiita:https://qiita.com/f-techforge

f-techforgeをフォローする

コメント

タイトルとURLをコピーしました