🚘

車載開発:AUTOSAR CLASSICの全体概要

に公開

AUTOSAR Classic Platformの全体構成と、要するにどの辺がポイントなの?ってなるので特によく利用される領域ごとに自分なりに分けて記載してみました。


引用:NXP

基本構成

  • Application Layer (APP)
    ユーザが開発するアプリケーションコード群

  • RTE (Run-Time Environment)
    APPと下位AUTOSAR BSW(Basic Software)との仲介を行うミドルウェア

  • AUTOSAR Stack
    OS、通信、診断、メモリ、I/O等の共通処理スタック

ふつうAUTOSARスタックって手打ちすることは無いはずです。統合開発環境(IDE)でGUI等でコンフィグして設定してオートコードして使用するのが一般的な認識です。

引用:Vector (なんか古いですが、一応公式)

以下はGPTに聞いてツールの例を出してもらいました笑
主な統合開発ツール(ベンダ例)

ベンダー ツール名 備考
Vector DaVinci Developer / Configurator 欧州で広く採用。GUIでBSW構成とコード生成が可能
Elektrobit EB tresos Studio OEMやサプライヤ向けに強い。標準AUTOSAR準拠
ETAS ISOLAR-A / B Bosch系。分割型の構成で柔軟
日立Astemo / DENSO等 自社ツール(社内用) 車両制御ECUなどで独自派生も存在

よく使うのはCAN系と不揮発系、あとOS関連かと思うので分けて分類します。

CAN通信関連モジュール

一般的なECUだと一番よく触るモジュールではないでしょうか。ARXMLでだいぶ効率化されてる印象はありますが、、、別記事で詳細書こうと思います。

共通系

モジュール名 役割概要
PduR PDUのルーティングを担当。COMやDCMなどの上位⇔下位層を中継
CanIf CANドライバ抽象化層。上位に対して物理チャネルを隠蔽
Can Driver 実際のハードウェア制御(送受信・バス状態制御など)

診断機通信系

モジュール名 役割概要
CanTp ISO-TP(フレーム分割/再構築)を提供
DCM 診断サービスの制御・提供(UDSなど)
DEM 故障イベント管理(DTC記録・SSR等)

制御通信系

モジュール名 役割概要
COM アプリ層⇔通信層間のインタフェース(信号単位)
COMM 通信の起動・停止管理(ECU起動・スリープ制御)
CanNm CANネットワーク管理(ネットワーク参加状態管理)

不揮発メモリ関連モジュール

こちらも次点でよく触る印象があります。特にNvMですね。
こちらも別記事で書きたい。

モジュール名 役割概要
NvM 永続データの管理。EEPROM/Flashへの抽象化インタフェース
Fee / Ea 物理EEPROMやFlashへの読み書き管理(Fee: Flash EEPROM Emulation, Ea: EEPROM abstraction)
MemIf 物理メモリデバイスへのドライバ抽象化層

I/O関連モジュール

これは変更ないとあまり触らないかなと。HW IF仕様に沿ってコンフィグする印象でそこまでトラブルもないかなと思います、たぶん。

モジュール名 役割概要
Dio デジタルI/O制御(ピン単位)
Port ポート設定管理(方向・初期値など)
Adc アナログ→デジタル変換制御
Pwm PWM出力制御
Gpt / Icu 汎用タイマ/入力キャプチャ制御などの時間関連

OS関連モジュールと制御

OS系は本記事である程度書いてみます。

モジュール名 役割概要
OS タスク制御、割り込み、イベント制御などRTOS機能を提供
SchM モジュール単位の排他制御。AUTOSAR規定の排他セクション管理

OS

RTOS全般かと思いますが、ハードウェアタイマを根幹としてソフトウェアタイマに変換した後にスケジューラとして起動するイベントと、ハードウェア割込み起点のイベント、ソフトウェアイベント等があります。これらはOSで管理されます。

  • タスク:周期・イベントで起動される処理単位。拡張タスクはイベント待機が可能
  • イベント:タスクの再開トリガとして送信されるソフトウェアイベント
  • アラーム:ソフトウェアタイマ。一定周期でタスク起動やイベント送信を実行
  • ISR(割り込みサービスルーチン):ハードウェア割込みに対応し、OSで管理される
  • リソース:タスク間で共有するリソースを保護(優先度逆転防止)

SchM(Schedule Manager)

特にエッジECUではハードウェア割込みを多用することがあるかと思います、それらの割込み干渉としてクリティカルセクション制御を使います。SchMで定義、管理され、APPから呼び出すことで干渉を防止するように設計します。経験上、割込み系は一番トラブルが多いですよね。。。

  • 各BSWモジュール内のクリティカルセクションを統一的に制御
  • SchM_Enter_xxx / Exit_xxx 形式のマクロで排他制御を明示
  • 内部的にはOSのリソースを使って動作するが、BSW層がOS依存にならないよう抽象化されている

まとめ

AUTOSAR Classicを開発経験上から整理して記載してみました。また個々のモジュール群を別記事で書いてみます。

Discussion