初心者でもわかる RTOS開発入門 (1)

本記事は、eForceの【開発者から学べる入門ウェビナー】RTOS基礎編-座学をテキスト化したものです。RTOS(リアルタイムOS)の動作の仕組みや、RTOS上でのアプリケーション作成の流れ、μC3(マイクロシーキューブ)が採用しているμITRON(マイクロアイトロン)の概要とタスク動作について、開発者の観点から解説します。本記事は2部構成です。RTOSの代表的な機能である時間管理、スケジューラーの仕組みとマルチタスクについては後編で解説しております。

こんな方におすすめ
  • RTOSやμITRONの基礎について学んでみたい
  • RTOSについて今さら聞けないことを復習したい
  • 新入社員・中途社員としてRTOS(特にμITRON)を使ったSW開発を行う可能性があるので勉強したい

1. RTOSを利用した開発の特徴

RTOSが必要になった経緯


昭和の家電黎明期、冷蔵庫や洗濯機、テレビといった白物家電はメカ的な動作で機器を制御していました。その後、家電にマイコンが搭載されるようになり、多くの機能が追加されてきました。例えば、炊飯器ではセンサで温度管理し美味しくお米が炊けるようにするのは勿論、表示やタイマーなどの制御もマイコンが担っています。

近年では家電製品にもネットワークの機能が搭載され、スマホからの機器のコントロールができるなど、さらに機能が複雑化しています。また、ネットワークに接続されていることで、ロボットや自動車、工場などに多くのセンサが取りつけられ対象をモニタリング・制御すると同時に、取得したセンサのデータをクラウドに収集しています。さらに収集したデータをAIで解析し、その結果を用いて制御の最適化を図る流れができつつあります。

この様に組込みのシステムが複雑化していることから、近年ではRTOSのようなマルチタスクの役割を担うツールの需要がより高まっています。

RTOSとは

要求される時間内に処理が実行できるシステム(リアルタイムシステム)を構築するためのOSのこと。産業ロボットや輸送機械など、主に組込み機器向けのOSとして使用されている。

組み込みで使用するリアルタイムOS(RTOS)とは?入門者向けに意味、種類、特徴を解説

組込みでのリアルタイム処理で必要とされる要素

組込みシステムは現実の物理世界が対象となります。現実世界の音や光、温度、状態といった外部環境の変化を捉えるのにセンサを利用します。センサから割り込まれて入った変化の情報に対して、定められた時間以内に処理を完了するというリアルタイム性が求められます。通信処理や温度制御・機器の制御などでは、特に変化に対する応答時間の制約がシビアになります。

組込みシステム  現実の物理世界が組込みシステムの対象
何が必要とされるか 外部環境(音・光・温度・状態)の変化への対応
時間の制約 通信処理・温度制御・車の制御 変化への応答に時間の制約がある
リアルタイム処理 定められた時間内に処理(決められた手順)を完了する

2. RTOSを利用してアプリケーション構築するには

機能的に処理を分割

上図はRTOSなしの場合とRTOSありの場合の処理の違いを示したものです。RTOSなしの場合は、全ての機能が大きな無限ループの中で行われるため、複数の処理が一緒くたになっています。一方、RTOSありの場合は、タスクを利用して機能ごとに処理を分割しています。機能のモジュール化ができるので、複数名での並列開発が可能となり機能単位での保守性・拡張性も向上ます。

RTOSなしの場合

RTOSなしでシステムを構築する場合はリアルタイム処理の調整が大変になります。組込みの内部では、キーが押された・センサに入力があった・受信があったなど、様々なイベントが発生しますが、これらは基本的に互いに関連がありません。そのため、CPU側はイベントが発生しているか定期的にチェックする必要があります。これらの処理には実行頻度の多いものと少ないもの、緊急性の高いものと比較的後回しにしてよいものが混在します。

いわゆる一筆がきなプログラムなので、チェックする周期が長いとイベントの発生から検出までにタイムラグが生じ、周期を短くするとその処理ばかりに時間を取られ他の処理に影響がでてしまいます。また、どこかのタイミングを調整した後に他の機能を変更すると、調整が完了した部分のタイミングに影響を与えることも考えられます。そのためアプリケーションの変更や維持も困難になります。規模が大きくなるほどプログラムの実行時間の見積もりや管理は複雑化します。そこでRTOSの出番です。

※リアルタイム処理の調整が大変ということは、産業用機器の制御においては致命的なエラーにつながりかねません。(自動車なら障害物検知に時間がかかるとブレーキする前に激突してしまいますし、AV機器だったら処理の遅延が重なれば再生時に音飛びがしたり、コマ落ちしてしまうなど実用的と言えなくなってしまいます)

RTOSありの場合

RTOSありの場合は各処理をタスクという単位で取り扱います。上図のように、機能単位に分割して、各タスクに処理を実装することで仕事の切り分けができます。各タスクは、関連するイベントの発生ごとにタスクの状態を変化させながら動作させるイベント駆動型の処理を構築しています。例えば「ボタンが押された」「ポートに入力があった」「受信した」などといった特定のイベントが発生した際に、割込みを活用して対応するリアルタイム性が求められる処理を高速に呼び出せるようにします。

一つのタスク中のプログラムは逐次実行されますが、異なるタスクのプログラムはRTOSの機能により時分割で制御され、複数のタスクの実行を疑似的に並列に実行させます。また、仮に処理が重なったとしても各タスクは優先度を設定できるので、RTOSの機能によって優先度が高いタスクから処理することができます(具体的な仕組みについては後述)。このようにRTOSを使うと、各タスクは独立して処理を構築・調整できるため、アプリケーションのリアルタイム化に貢献することができます。

割込みとは

外部からの変化をトリガとして、現在実行中の処理を退避させた後、予め指定したプログラムを実行すること。

実際のコード例

上図はTask Cを抜き出したコード例です。タスクは基本的にはひとつの独立した関数ベースで処理を組みます。eForceの一部のパッケージ製品ではWindowsのGUIアプリケーションであるコンフィグレータが付属しています。このコンフィグレータで、アプリケーション開発で使用するタスクや割込みサービスルーチンをより簡潔に定義することができ、さらにコンフィグレータのソースコード生成機能により定義したこれらの処理を記述するためのスケルトン関数を生成してくれます。

このスケルトンコードは、各タスクに設定する優先度や属性などを定義した上で必要なアプリケーションプログラムを構築する際の助けとなるように作られており、主要な制御構造や関数などの宣言や呼び出し、処理の核心部分などのプログラムの大枠が予め定義されたものが記述されています。そのスケルトン関数に対してTask Cの機能部は、for(;;)の形で永久ループとして作成し、割り込み待ちと処理の判定、判定に応じた具体的な処理をアプリケーションの開発者自身で記述します。割込みサービスルーチン処理には外部環境(音・光・温度・状態)の変化に対応する、タスク待ち解除を作ります。

3.μITRONの概要

μITORN4.0仕様

μITRONとは、リアルタイムOS(RTOS)の仕様の一つです。μITRONは、旧トロン協会によってAPIの仕様が策定されています。現在はトロンフォーラムに管理され、組み込み機器に要求されるリアルタイム処理が可能となる特長があります。インターネット上でAPI仕様が公開されている国産のオープンアーキテクチャで、これを使って誰でもμITRON仕様のRTOSを作成することができるため、多くの商用μITRONが存在します。また、多様な組込みシステムに広く適用できるよう「弱い標準化」というコンセプトに基づいて設計されています。μITRONの仕様では実装レベルまでは規定がされていないので、多種多様なハードウェアの上で性能を最大限に発揮させることが可能になります。eForce社のRTOS μC3は、μITRON4.0 仕様に準拠したカーネルをコアに持った RTOSとなっています。

弱い標準化とは

共通化すると実行時性能の低下につながるような部分については無理に標準化を行わず、ハードウェアやアプリケーションに依存して決めるべき部分として残すアプローチのこと

μTRONを使用するメリット

  • 機能のモジュール化ができる
    機能の追加削除が容易になる
    コードの可読性が高くなる
    モジュール単位で構築されているため他のシステムへの移植も検討しやすい
  • 複数名で並列開発が可能になる
    納期の短縮に繋がる
  • 機能単位での保守性・拡張性が高い
    製品の機能によって必要があるものだけを変更できる
    仕様変更や機能追加がタスク単位で対応できる
    仕様変更や機能追加がシステム全体に及ぼす影響が少ない
    RTOSなしでは困難になりがちな実行予測性が高まる

μITRONとは?入門者向けに意味・特徴・種類を解説

リアルタイム処理が得意なμITRON

μITRONの最大の利点はリアルタイム処理が得意なことです。組込み用途にも使われる汎用OSであるLinuxそれぞれのシステム構成を示します。
μITRONのRTOSはCPUとその周辺デバイスを制御する基本的な管理ソフトウェア、つまりカーネルの部分を指し、リアルタイムカーネルとも呼ばれています。タスク間の同期通信のために割り込みとタスクとの連携を持つ機能があり、さらに割り込み処理もリアルタイムに構築することが可能になります。Linuxはアプリケーションで利用可能なミドルウェアが充実している利点がありますが、リアルタイム処理は苦手です。μITRONでは、カーネル部分は機能単位で構築されていることから、アプリケーションで利用する機能に応じてコードサイズの節約も可能で組込みの利用に適しています。主要機能のうち、タスクスケジューリング、タスク間協調、時間管理については初心者でもわかるRTOS開発入門(2)で詳細を述べます。

システムコールとは

RTOSの機能を利用するためにアプリケーションから呼び出すAPIのこと。
μITRONのRTOSでは主要な機能はシステムコール(OS提供関数)で実現します。

国内はITORNが24年連続シェアNo.1

ITRON APIは国内で最も使用されているAPIで、産業機器、医療機器、IoT、通信、自動車、OA等、幅広い用途での採用実績があります。OSベンダ、ミドルウェアベンダ、CPUベンダ等サポートベンダ数もNo1です。μC3はμITRON仕様のRTOSです。

4.ミドルウェアの活用

アプリケーション開発では、Ethernet、Wi-Fi、USB、SD、Bluetooth、GUIなど汎用的でありながらOSには搭載されていない機能が必要となる場合があります。これらの機能が共通部分としてパッケージ化されたミドルウェアを使用すると、システムに対して短期間にミドルウェアを利用した機能を組込むことができます。シェアが大きいμITRONを利用することでミドルウェアを提供するベンダも多くなることから、ユーザは選択肢が増え利便性が高まります。具体例として、ネットワークと接続が可能なシステムを考えた場合、イーサネットのミドルウェアを購入することでアプリケーションソフトの開発に注力できるため、システムの構築や機能追加が短期間で実現することができます。

ミドルウェアとは

開発を行うアプリケーションとRTOSの中間に存在して、アプリケーションの機能構築の手助けとなるソフトウェアのこと

ミドルウェアとは?定義、意味、特徴を初心者向けにわかりやすく解説

ハードウェアの違いをRTOSが吸収

組込みシステムのなかにはスマホのように一つの機種で100万台以上も生産するものも少なくありません。このようなシステムだと100円安いプロセッサを使うことができれば莫大なコストダウンになるので、部品のコストをさげるためにハードウェアの変更を検討することがあります。またCPUや周辺ICの生産中止などに伴い、新たにハードウェアを作り直すことがあります。このため、多くの組込み機器のプログラムには、移植性の高さが求められます。μITRONを利用したアプリケーションの場合も、提供されるRTOSとドライバがアプリケーションとハードウェアの間に入り、ハードウェアの違いを吸収してくれることから、ハードウェアであるマイコンが変わっても上位層であるアプリケーションの移植性へのメリットが考えられます。この、ハードウェアの違いをRTOSが吸収してくれることによってアプリケーションの移植が容易となり、メンテナンス効率の向上につながります。これにより、社内の資産が有効活用され、開発効率の向上に繋がります。

5.まとめ

ポイント
  • 組込み機器の複雑化はRTOSによる開発支援で解決
  • RTOSの利用とはタスクを活用すること
    機能単位に処理を分割して開発
  • RTOSを利用した開発の特徴
    保守性や開発効率の向上
    メンテナンス、移植作業の効率が良い
    ミドルウェアを積極的に活用できる

次回はμITRONの具体的な機能とタスク動作について解説します。動画資料をご覧になりたい方はこちらからダウンロード可能です。

【開発者から学べる入門ウェビナー】RTOS基礎編-座学
~0.RTOSの動作の仕組みや、RTOS上でのアプリケーションの作成について解説~