Main Content

AUTOSAR コード置換ライブラリによるコード生成

モデルが AUTOSAR コード生成用に構成されている場合は、AUTOSAR 4.0 コード置換ライブラリを使用して、AUTOSAR 規格により詳細に準拠する関数を生成できます。

AUTOSAR コード生成のコード置換ライブラリ

AUTOSAR 4.0 コード置換ライブラリにより、コード ジェネレーターをカスタマイズして AUTOSAR 規格により詳細に準拠する C コードを生成できます。次の場合にコード置換ライブラリの使用を検討します。

  • ライブラリで提供されているサービス ルーチンを使用する。

  • サービス ルーチンの置換コードがある。

  • AUTOSAR のファイル命名規則 (任意の指定内容を処理するためのルーチン) に従う置換コードが 1 つのヘッダーファイルに含まれている (Mfl.hMfx.h など)。

  • AUTOSAR ライブラリをコンパイルして生成されたコードとリンクするビルド ハーネス設定がある。AUTOSAR 用のコードをビルドする方法の詳細については、コード生成を参照してください。

メモ

MATLAB® および Simulink® のルックアップ テーブルのインデックスは AUTOSAR MAP のインデックスとは異なります。MATLAB は、行 (u1) および列 (u2) の線形代数アプローチを採用しています。AUTOSAR (および ASAM) は x 軸 (u2) および y 軸 (u1) の直交座標アプローチを採用しています。ここで、u1 および u2 は Simulink 2 次元ルックアップ テーブル ブロックへの入力引数です。この違いにより、コード置換ソフトウェアは AUTOSAR MAP ルーチンの入力引数を転置します。

コード置換とコード置換ライブラリの詳細については、コード置換とは (Embedded Coder)およびコード置換ライブラリ (Embedded Coder)を参照してください。

サポートされている AUTOSAR ライブラリ ルーチンの検索

AUTOSAR コード置換ライブラリでサポートされている AUTOSAR ライブラリ ルーチンを参照するには、コード置換ビューアー (Embedded Coder)を使用します。ビューアーを開くには、コマンド プロンプトで「crviewer('AUTOSAR 4.0')」と入力します。

詳細については、コード置換ライブラリの選択 (Embedded Coder)を参照してください。

AUTOSAR 4.0 コード置換ライブラリを使用するようにコード ジェネレーターを構成

モデルに AUTOSAR コード置換ライブラリを使用するようにコード ジェネレーターを構成するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。[コード生成][インターフェイス][コード置換ライブラリ][AUTOSAR 4.0] を選択します。

コード置換とコード置換ライブラリの詳細については、コード置換とは (Embedded Coder)およびコード置換ライブラリ (Embedded Coder)を参照してください。

AUTOSAR 4.0 ライブラリのホスト コード検証

AUTOSAR モデルの MATLAB ホスト コード検証をサポートするために、AUTOSAR Blockset は AUTOSAR 4.0 ライブラリで IFX、IFL、MFX、および MFL ルーチンのホスト実装を提供しています。ホスト ライブラリ実装では、AUTOSAR 4.0 ライブラリからコード置換をトリガーするモデルのソフトウェアインザループ (SIL) 検証を有効にします。

次の AUTOSAR モデルを検討してください。このモデルには、AUTOSAR IFX および MFX ルーチンのコード置換をトリガーするように調整された内挿および数学ブロックが含まれています。モデル コンフィギュレーション パラメーターで、[システム ターゲット ファイル] (Simulink Coder)[autosar.tlc] に設定され、[コード置換ライブラリ] (Embedded Coder)[AUTOSAR 4.0] に設定されています。

モデルの SIL シミュレーションを構成して実行します。SIL シミュレーション:

  1. モデル コードを生成します。MathWorks® ホスト ライブラリの実装は IFX、IFL、MFX、および MFL ルーチンのコード置換で使用されます。

  2. SIL アプリケーションをビルドします。ホスト ライブラリは SIL 実行可能ファイルにリンクされます。

  3. モデルを実行すると、SIL 設定に基づいてシミュレーション出力が生成されます。

SIL シミュレーションに自分のホスト ライブラリまたはカスタム コードを使用する場合は、次のコマンドを使用して MathWorks ホスト ライブラリを無効化できます。

set_param(modelname,'DisableAUTOSARRoutinesHostLibrary','on');

コード置換ライブラリのチェック

コード置換では、入力、ブレークポイント、table、出力のそれぞれの型の組み合わせについて AUTOSAR 仕様と互換性があることが必要です。浮動小数点 (IFL) の置換は single 型のみをサポートしますが、固定小数点 (IFX) の置換は uint8、uint16、int8、int16 および関連付けられている固定小数点型をサポートします。これらのルーチンのブロックを使用する場合、型の組み合わせ要件は変化し、必要に応じて適用されます。

IFX/IFL 関数の置換の AUTOSAR コード置換ライブラリ例

コード置換ビューアーには、ルックアップ テーブルの C コードに生成できる AUTOSAR 浮動小数点内挿 (IFL) ライブラリ ルーチンおよび固定小数点内挿 (IFX) ライブラリ ルーチンがリストされます。ルックアップ テーブルの C コードを IFL ライブラリ ルーチンまたは IFX ライブラリ ルーチンに置き換えるために、AUTOSAR Blockset は AUTOSAR コード生成用に事前構成されたルックアップ テーブル ブロックを提供します。モデルに Curve または Map などのブロックを挿入してから、ブロック ダイアログ ボックスを開き、設計に必要な固有の内挿ルーチンを生成するブロックを設定します。詳細については、AUTOSAR キャリブレーションおよび測定用のルックアップ テーブルの設定を参照してください。

この例では、AUTOSAR のルックアップ テーブル ブロックに対して生成されるコードを、AUTOSAR の IFL ライブラリ ルーチンと互換性のある関数で置換する方法を説明します。IFX ライブラリ ルーチンでコードを置換する場合は、ルックアップ テーブル ブロックのダイアログ ボックスを編集して、ターゲットのルーチン ライブラリを変更できます。

  1. AUTOSAR ルックアップ テーブル ブロック PrelookupCurve Using PrelookupMap Using PrelookupCurve、または Map のいずれかを使用して、Simulink モデルを作成します。たとえば、Curve Using Prelookup に接続されている Prelookup ブロックがあります。

    あるいは、表示されたブロックを含む AUTOSAR モデル例 mAutosarLutObjs.slx を開くこともできます。このモデル ファイルを作業フォルダーにコピーするには、次の MATLAB コマンドを入力します。

    copyfile(fullfile(matlabroot,'help/toolbox/autosar/examples/mAutosarLutObjs.slx'),'.')
  2. 各ルックアップ テーブル ブロックを開いて、AUTOSAR 4.0 コード置換ライブラリ (CRL) からルーチンを生成するように設定します。ブロック設定を変更すると、ブロック ダイアログ ボックスでターゲットの AUTOSAR ルーチンの名前が更新されます。

    この例にあるブロックの設定の詳細については、ルックアップ テーブル オブジェクトとブレークポイント オブジェクトを使用した COM_AXIS ルックアップ テーブルの設定 を参照してください。

  3. モデルに対して AUTOSAR 4.0 CRL を使用するようにコード ジェネレーターを設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスで [コード生成][インターフェイス][コード置換ライブラリ][AUTOSAR 4.0] を選択します。あるいは、コマンド ラインまたはプログラムで実行する場合、set_param を使用して CodeReplacementLibrary パラメーターを 'AUTOSAR 4.0' に設定します。

  4. オプションで、コード置換をトリガーしたブロックについてまとめたコード生成レポートを生成するようにモデルを設定できます。[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成][レポート] ペインで、オプション [コードの置き換えをトリガーするブロックをまとめる] を選択します。あるいは、コマンド ラインまたはプログラムで実行する場合、set_param を使用して GenerateCodeReplacementReport パラメーターを 'on' に設定します。

  5. モデルをビルドし、期待どおりにコードが置換されているか、生成されたコードをレビューします。たとえば、ルーチンの接頭辞 Ifl を求めて、生成されたコードを検索します。

IFL/IFX 関数とブロック マッピングに必要なアルゴリズム プロパティ設定

IFL/IFX 関数とブロック マッピングアルゴリズム プロパティのパラメーター

Ifl_DPSearch

Prelookup

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

上限またはそれを超える入力に対して最後のブレークポイントを使用する

UseLastBreakPoint

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifl_IpoCur

Interpolation Using Prelookup

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifl_IpoMap

Interpolation Using Prelookup

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifl_IntIpoCur

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifl_IntIpoMap

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_DPSearch

Prelookup

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

上限またはそれを超える入力に対して最後のブレークポイントを使用する

UseLastBreakPoint

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_IpoCur

Interpolation Using Prelookup

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_LkUpCur

Interpolation Using Prelookup

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

Ifx_IpoMap

Interpolation Using Prelookup

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_LkUpMap

Interpolation Using Prelookup

内挿法

InterpMethod

最も近い正の整数方向

外挿法

ExtrapMethod

クリップ

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

Ifx_LkUpBaseMap

Interpolation Using Prelookup

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

生成コードの範囲外インデックスに対する保護を削除する

RemoveProtectionIndex

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

インデックスの入力を最後のインデックスに達するようにする

ValidIndexMayReachLast

オン

Ifx_IntIpoCur

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_IntLkUpCur

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

Ifx_IntIpoFixCur

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

モデル コンフィギュレーション パラメーター [最適化][既定のパラメーター動作]

DefaultParameterBehavior

インライン

ブレークポイント データは 2 のべき乗の間隔に一致していなければなりません。

 

Ifx_IntLkUpFixCur

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

モデル コンフィギュレーション パラメーター [最適化][信号とパラメーター][既定のパラメーター動作]

DefaultParameterBehavior

インライン

ブレークポイント データは 2 のべき乗の間隔に一致していなければなりません。

 

Ifx_IntIpoFixICur

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

ブレークポイント データは 2 のべき乗の間隔に一致してはなりません。

 

Ifx_IntLkUpFixICur

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

ブレークポイント データは 2 のべき乗の間隔に一致してはなりません。

 

Ifx_IntIpoMap

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

Ifx_IntLkUpMap

n-D Lookup Table

内挿法

InterpMethod

最も近い正の整数方向

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

Ifx_IntLkUpBaseMap

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

[線形探索] または [二分探索]

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

Ifx_IntIpoFixMap

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

モデル コンフィギュレーション パラメーター [最適化][信号とパラメーター][既定のパラメーター動作]

DefaultParameterBehavior

インライン

ブレークポイント データは 2 のべき乗の間隔に一致していなければなりません。

 

Ifx_IntLkUpFixMap

n-D Lookup Table

内挿法

InterpMethod

最も近い正の整数方向

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

モデル コンフィギュレーション パラメーター [最適化][信号とパラメーター][既定のパラメーター動作]

DefaultParameterBehavior

インライン

ブレークポイント データは 2 のべき乗の間隔に一致していなければなりません。

 

Ifx_IntLkUpFixBaseMap

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

モデル コンフィギュレーション パラメーター [最適化][信号とパラメーター][既定のパラメーター動作]

DefaultParameterBehavior

インライン

ブレークポイント データは 2 のべき乗の間隔に一致していなければなりません。

 

Ifx_IntIpoFixIMap

n-D Lookup Table

内挿法

InterpMethod

線形

外挿法

ExtrapMethod

線形

インデックス検索法

IndexSearchMethod

等間隔のポイント

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

ブレークポイント データは 2 のべき乗の間隔に一致してはなりません。

 

Ifx_IntLkUpFixIMap

n-D Lookup Table

内挿法

InterpMethod

最も近い正の整数方向

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

ブレークポイント データは 2 のべき乗の間隔に一致してはなりません。

 

Ifx_IntLkUpFixIBaseMap

n-D Lookup Table

内挿法

InterpMethod

フラット

外挿法

ExtrapMethod

クリップ

インデックス検索法

IndexSearchMethod

等間隔のポイント

生成コードの範囲外入力に対する保護を削除する

RemoveProtectionInput

オフ

整数丸めモード

RndMeth

[丸め] または [ゼロ]

最後のブレークポイント、またはその上で入力に対して最後のテーブル値を使用

UseLastTableValue

オン

ブレークポイント データは 2 のべき乗の間隔に一致してはなりません。

 

関連する例

詳細