FreeRTOSの全体構成


【FreeRTOSの全体構成】

FreeRTOSを使った場合のプログラム全体構成は下図のようになります。
まず機能単位ごとに「タスク」という形でプログラムを構成します。
このタスクの実行順序の制御をFreeRTOSが行います。
 このタスクの状態を管理するためにTCB(Task Control Block)という
管理テーブルがタスクごとに用意されます。
 FreeRTOSはタイマ1のインターバル割り込みの都度、タスクの実行順序を
決定して実行権を移します。(ラウンドロビン)
 その他の割り込みは、割り込み処理として作成し、タスクの状態変更や
データの送受信をFreeRTOSのAPI関数を使って行います。




タスク間の同期はセマフォを使って待ち合わせを制御することで行います。
データの送受信は、キューバッファを待ち合わせ行列として使うことで、
特定のタスクでまとめて特定デバイスとの送信や受信を行います。

このセマフォやキューのコントロールもFreeRTOSが一括して行いますので
タスクはAPI関数を使って要求するだけとなっています。
タスクごとにスタックメモリが用意される構成になっていますので、タスクの数
によりRAMの使用量が増えます。

【FreeRTOSのファイル構成】

FreeRTOS Ver5.20をベースにして解説します。
FreeRTOSの全体は下記のようなファイルで構成されています。
ディレクトリが基本の部分(Source直下)と移植で変わる部分(portable下)に
分かれています。全体に関連するヘッダファイルがinclude下にまとめられて
います。
 基本部は4個のファイルで構成されており、それほど巨大なプログラム
ではないので、中身を解読するのも差ほど難しいものではありません。
 FreeRTOSの構成を設定するためのファイル(FreeRTOSConfig.h)が、
プロジェクトごとに必要とされます。



【各ファイルの機能】

FreeRTOSに含まれる各ファイルの機能は下記のようになっています。
FreeRTOSの基本部は4個のファイルだけで構成されています。
移植の際に変更がある部分は独立にportableというディレクトリに集め
られています。

【種類】とディレクトリ ファイル名 機能内容
【FreeRTOSの基本部】


Source
tasks.c プリエンプティブ構成タスクの生成、削除、切替などの制御
queue.c キューの制御、データの受け渡しとタスクのブロッキングの制御
list.c TCBなどの優先順位チェインリストの更新
croutine.c 協調ルーチンの生成、削除、待ち合わせなどの制御
【FreeRTOSの移植部】
  (PIC32MXの例)

Source\portable\MPLAB
     \PIC32MX
ISR_Support.h アセンブラ部のレジスタ定義など
port.c 割り込み処理など移植で変わる部分のソース
port_asm.S レジスタ退避などの移植部のアセンブラソース
portmacro.h 移植部のマクロの定義
【ヘッダファイル】


Source\include
croutine.h
FreeRTOS.h
list.h
portable.h
projdef.h
queue.h
semphr.h
StackMacro.h
task.h
それぞれのCソースに対するヘッダファイル

portbale.h のみportmacro.hをインクルードするディレクトリ指定の変更が必要
【メモリ管理】

Source\portable\MemMang
heap_1.c 固定配置で確保する、タスクを削除しない場合に使う
heap_2.c 動的に配置を管理する。
タスクの生成と削除を動的に行う場合に使う
heap_3.c 標準のmalloc、free関数を使って動的に確保する
タスクやバッファを動的に生成、削除する場合に使う
【アプリケーション】
プロジェクト内
FreeRTOSConfig.h FreeRTOSの構成を設定するファイル



目次に戻る