Main Content

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

S-Function 用の行優先のコードの生成

S-Function を含むモデル用の行優先コードを生成できます。既定では、コード ジェネレーターは列優先のコードを生成します。行優先のコード生成の詳細については、行列および配列のコード生成を参照してください。

S-Function を含む既存のモデルで、コンフィギュレーション パラメーター配列のレイアウトを [Row-major] に設定する場合、コンフィギュレーション パラメーター行優先コード生成の外部関数互換性が有効になり、既定で [error] に設定されます。既存のモデルをビルドしようとしても、S-Function が行優先のコード生成で既定で有効になっていないため、エラーが表示されます。[行優先コード生成の外部関数互換性] コンフィギュレーション パラメーターを使用して、行優先のコード生成用の S-Function の互換性をテストできます。

このワークフローは、モデルの C Caller ブロックにも適用可能です。

1. モデル例 ex_sfcn_rowmajor_unset を開きます。モデルには、次の追加ファイルが必要です。

これらのファイルをローカル フォルダーに保存します。

open_system('ex_sfcn_rowmajor_unset');

2. このモデルでは、[配列のレイアウト] が [Column-major] に設定されています。行優先のコード生成を有効にするには、[配列のレイアウト] を [Row-major] に設定します。

3. モデルをビルドすると、コード ジェネレーターはビルドを停止し、次のエラー メッセージが表示されます。

4. 続行するには、次のいずれかを行います。

  • モデルの行優先のコードを含む既存の S-Function をテストする場合、コンフィギュレーション パラメーター [行優先コード生成の外部関数互換性] の設定を [warning] または [none] に設定します。コード ジェネレーターは、S-Function 用の行優先のコードを生成せずにビルドを完了します。

  • 行優先の配列レイアウトと互換性があるように S-Function を更新する場合、S-Function API を使用して行優先のコード生成用の S-Function を有効化します。

配列レイアウトが指定されていない S-Function 用のモデルをテストするために、モデルでモデル アドバイザー チェックを実行することもできます。[配列のレイアウトが未設定の TLC S-Function を特定] チェックをオンにして、[このチェックを実行] ボタンをクリックします。モデルに配列レイアウトが指定されていない S-Function が含まれている場合、次のような警告が表示されます。

ユーザー定義の S-Function の配列レイアウトを指定するために、SimStruct API の関数ssSetArrayLayoutForCodeGenを使用します。列挙型 SSArrayLayout を以下に設定できます。

  • SS_UNSET – この設定は、ブロックを行優先のコード生成について無効にする既定の設定です。

  • SS_COLUMN_MAJOR – ブロックを列優先のコード生成についてのみ指定します。

  • SS_ROW_MAJOR – ブロックを行優先のコード生成についてのみ指定します。

  • SS_ALL – ブロックを配列レイアウトに関係なくコード生成できるとして指定します。

5. mdlInitializeSizes メソッドに ssSetArrayLayoutForCodeGen を追加して ex_sfcn_rowmajor.c ファイルを更新します。

static void mdlInitializeSizes(SimStruct *S)
{    
    /* Specify array layout of the S-function */
    ssSetArrayLayoutForCodeGen(S, SS_ROW_MAJOR);
    .
    .
    .
}

S-Function が配列レイアウトの影響を受けない場合、SSArrayLayoutSS_ALL に設定します。

6. MATLAB® コマンド ウィンドウで、次のコマンドを使用して S-Function をコンパイルします。

mex ex_sfcn_rowmajor.c
Building with 'gcc'.
MEX completed successfully.

7. モデルをビルドしてコードを生成するには、Ctrl+B を押します。

S-Function Builder を使用して S-Function を生成する場合、S-Function の優先方向を指定にはパラメーター [配列のレイアウト] を使用します。詳細については、Build S-Functions Automatically Using S-Function Builderを参照してください。レガシ コード ツールを使用した C 関数の統合では、legacy_codeconvertNDArrayToRowMajor オプションを使用します。S-Function Builder およびレガシ コード ツールは、ノーマル モードでのシミュレーション中に S-Function が行優先の配列レイアウトに設定される場合、それに先立って転置を適用します。

関連するトピック