メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

コード置換とは

コード置換とは、アプリケーション コードの要件を満たすためにコード ジェネレーターが生成するコードの関数と演算子を変更する手法です。たとえば、生成コードを置き換えて次のような要件を満たすことができます。

  • 特定のターゲット ハードウェアを含むがこれに限定されない、特定の実行時環境向けの最適化

  • 既存のアプリケーション コードとの統合

  • AUTOSAR などの規格への準拠

  • 非有限数またはインラインのサポートを有効または無効にするなどのコードの動作の変更

  • 以下のようなアプリケーションまたはプロジェクト固有のコード要件

    • math.h の消去

    • システム ヘッダー ファイルの消去

    • memcpy または memset の呼び出しの消去

    • BLAS の使用

    • 特定の BLAS の使用

この手法を適用するには、コード ジェネレーターを構成してコード生成中にコード置換ライブラリ (CRL) を適用します。既定では、コード ジェネレーターはコード置換ライブラリを適用しません。MathWorks® が提供するライブラリおよび Embedded Coder® 製品を使用して作成および登録するライブラリから選択できます。使用可能なライブラリのリストは以下に応じて変わります。

  • インストールされているサポート パッケージ。

  • システム ターゲット ファイル、言語、言語標準、およびデバイス ベンダー構成。

  • Embedded Coder 製品を使用してライブラリを作成および登録したかどうか。

GNU99 拡張を含むライブラリは、GCC コンパイラと共に使用するためのものです。これらのライブラリのいずれかを別のコンパイラと共に使用すると、生成コードがコンパイルされない場合があります。

コード置換ライブラリ

"コード置換ライブラリ" は、関数と演算子のアプリケーション固有の実装を指定する、1 つ以上のコード置換テーブルから構成されています。たとえば、特定の組み込みプロセッサ用のライブラリは、生成コードをそのプロセッサ用に最適化する関数と演算子の置換を指定します。

"コード置換テーブル" には 1 つ以上の"コード置換エントリ" があり、各エントリは関数または演算子の可能な置換を表します。各エントリによって、関数または演算子の "概念表現""実装表現" と優先順位にマップされます。

Diagram showing a code replacement library containing code replacement tables which contain entries.

テーブル エントリ コンポーネント説明
概念表現

テーブル エントリを識別します。コード ジェネレーター用の一致条件を含みます。以下から構成されます。

  • 関数の名前または "キー"。関数名によりほとんどの関数が特定されます。演算子と一部の関数については、キーと呼ばれる一連の文字が関数または演算子を特定します。たとえば、関数名 'cos' や演算子キー 'RTW_OP_ADD' です。

  • "概念引数"。置換する関数または演算子の入力引数または出力引数を表します。概念引数は、コード ジェネレーターによる命名 ('y1', 'u1', 'u2', ...) と対応する I/O の種類 (出力または入力) およびデータ型を観察します。

  • アルゴリズム、固定小数の飽和、丸めモードなどの関数または演算子の一致条件を特定するその他の属性

実装表現

置換コードを指定します。以下から構成されます。

  • 関数名。たとえば、'cos_dbl''u8_add_u8_u8' など。

  • "実装引数"。C または C++ 置換関数の入力引数または出力引数を表します。実装引数は、対応する I/O の種類 (出力または入力) およびデータ型と一致する C/C++ の名前およびデータ型の指定を観察します。

  • ヘッダー名、ソース ファイル名およびビルド リソースのパスなどの追加の実装の詳細を示すパラメーター

優先順位

テーブル内のその他のエントリに対するエントリ優先順位を定義します。値は 0 から 100 の範囲で、最も優先順位が高いのは 0 です。複数のエントリの優先順位が同じ場合、コード ジェネレーターはその優先順位の最初に一致するものを使用します。

コード ジェネレーターがコード置換ライブラリ内で一致するものを検索するときに、関数または演算子の概念表現を使用して "呼び出しサイト オブジェクト" が作成され、値が入力されます。一致が存在する場合、コード ジェネレーターは、実装表現により値が入力された、一致したコード置換エントリを使用して、コードを生成します。

コード ジェネレーターは、ライブラリ内のテーブルの順序で一致するものがあるかどうか、コード置換ライブラリ内のテーブルを検索します。コード ジェネレーターによりテーブルで複数の一致が検出された場合、一致は優先順位によって決まります。コード ジェネレーターは、優先順位が低い同様のエントリよりも、優先順位が高いエントリを使用します。

コード置換の制限

コード置換検証 — コード置換は想定と異なる動作をする可能性があります。たとえば、入力データ型と出力データ型が実装コードと一致している場合でも、Simulink® ブロックの中間データ型は、実装コードで使用される中間データ型と一致しないことがあります。また、置換コードの実装の詳細が原因で不一致が生じることもあります。実装が、Simulink がシミュレーションに使用するロジックと異なる場合があるためです。これにより、シミュレーションと生成されたコードの動作の間に不一致が生じることがあります。シミュレーションと生成されたコードの動作の間に不一致が生じる可能性がある場合は、生成されたコードを調べてコード置換を検証し、実装を確認することで、不一致を正当化します。

行列のコード置換 — コード置換ライブラリは、動的およびシンボリック サイズの行列をサポートしません。

参考

トピック