2 車載組込みソフトウェアの特性と構造
先の Section 1.2 の Figure 1.3 「組み込みシステムの構造.」の上層に示した「組み込みソフト」の部分に着目した構造について考える.
“車載組み込みソフトの多くは,車載部品のECU(Electronic Control Unit:電子制御ユニット)のROM(Read-Only Memory)に書き込まれ,部品の一部として出荷されます.物理的な構成から,テスト対象として組み込みシステムや組み込みソフトの特性について考えます.
2.1 ソフトウェア構造とインタフェース
組み込みソフトウェアの構造は Figure 2.1 「組み込みソフトウェアの構造.」に示す,RTOS/BSW,周期タスク,Eventタスクであり,インタフェースとして ECU や電子回路がある.それぞれの特徴は次のとおり.
- RTOS/BSW
リアルタイム制御のための特別な制御を行う処理部分で,RTOS(リアルタイムOS)と呼ばれている.BSWは自動車業界におけるコンソーシアムAUTOSAR(AUTomotive Open System ARchitecture)が2003年に始めたRTOS周りの仕様で,RTOS周りのインタフェースを定義している.
RTOS自身の実行を含め,シングルタスクで実行される.動的なメモリ管理やプロセス通信,I/Oに関連したドライバーなどは提供しない. - 周期タスク
リアルタイム処理を行うタスクは,決められた周期で繰り返し起動し実行する.周期タスクは,ハードリアルタイムを実現するため,特別な制約を満たす実装が強制されている.詳細は,後述する.
周期タスクは,通常2種類の周期,短周期とその周期の10倍程の長周期で構成されており,実行の優先度でHigh(短周期)とLow(長周期)に区別される. - Eventタスク
周期タスクの実行がアイドル中に動作するタスクで,CAN の処理など,処理が必要になった時に起動される.実行制御は,タイムスライスや優先順によって行われる.POSIX 標準のインタフェースを提供するRTOSもある.
2.2 ハードリアルタイムの仕組み
ハードリアルタイムとは,その応答性能がマイクロ秒単位で求められる特性です.エンジン制御やエアバッグを始め,応答時間の要件差はあるが,ほぼすべての車載組み込みソフトがその仕組みと制約を使っている.その要素を以下に示す:
- 協調的タスクの実行管理
一般的なタスク管理は,同時に多数のタスクを優先順位を配慮しながら動作させる.RTOSでは,協調的タスクの実行管理を行い,並行して複数のタスクを動作させないシングルタスク実行です.一般的な実行管理は,設定された時間分割でタスクを分割して実行するが,RTOSでは,タスク自身が終了するまで,次のタスクに制御を渡さない,協調的なタスク管理を行う. - 実行時間の確定性
実行時間の確定性とは,タスクが起動し,タスク自身で終了を宣言するまでの実行時間が,常に同一で一定時間内である特性です.この特性を実現するために,再帰処理やスタック処理を禁止しています.MISRAの制約は,確定性を実現する実装にて犯しやすい誤りを防ぐためのものです.
この制約は,一般的なソフトウェア工学の規範が使えないことを意味します.関数の引数は常にアドレス参照しか使えません. - プリエンプト機能
速い応答性能が求められる装置では,周期タスクの時間間隔が短くなり,その間隔内ですべてのタスク実行を終えることは不可能です.その対策としてプリエンプトを優先度の低い周期タスクやイベントタスクの実行管理で使うことがあります.プリエンプトが指定された実行キューでは,上位タスクの割込み処理を可能にします.この機能を使うと,ハードリアルタイム特性のタスク起動時間(俗にジッター)が長くなり,悪影響を及ぼします. - I/Oとロック処理
組み込みソフトにおける I/O はレジスタ(メモリに配置)に対する操作ですが,待ち時間や同時アクセスの制約があります.確定性を担保するため,タスク内でのwaitはできません.そのためミューテックス (相互排他)制御を使用します.RTOSのミューテックス制御は単純で,タスク自身でミューテックスエリアを確保し,設定,解除を行い,タイムアウトの機能をOS側が行います.
2.3 システムセットアップ(システム初期化)
車載組み込みソフトは,装置のECUのROMで提供され,RTOSが起動し制御を始める前処理が必要です.Figure 2.2「ROMから起動し動作状態へ」は,開発成果物から製品用のROMを製造し,車載において起動し稼働する流れを示したいる.そこでは次のような処理があります.
- ブートローダ
電源が投入され,最初に実行を開始する特定番地に機械語で書かれた短いコードです.このコードで,ECUの初期化,クロックの設定,ROMからの読み出しが始まります. - ハードウェアの初期化
I/Oレジスタの設定,制御対象装置の電子回路を初期化,回路の診断など. - RTOSとその制御用テーブル配置
RAMエリアへRTOS,制御テーブル,タスクのメモリ配置,様々な制御用定数の設定,実行キューを作成しタスクを登録する. - スケジューラーの開始
RTOS起動の関数を呼び出す.最初のタスクとして装置診断を行う場合もある.