S-Function 用の行優先のコードの生成
S-Function を含むモデル用の行優先コードを生成できます。既定では、コード ジェネレーターは列優先のコードを生成します。行優先のコード生成の詳細については、行列および配列のコード生成を参照してください。
S-Function を含む既存のモデルで、コンフィギュレーション パラメーター配列のレイアウトを [Row-major] に設定する場合、コンフィギュレーション パラメーター行優先コード生成の外部関数互換性が有効になり、既定で [error] に設定されます。既存のモデルをビルドしようとしても、S-Function が行優先のコード生成で既定で有効になっていないため、エラーが表示されます。[行優先コード生成の外部関数互換性] コンフィギュレーション パラメーターを使用して、行優先のコード生成用の S-Function の互換性をテストできます。
このワークフローは、モデルの C Caller ブロックにも適用可能です。
例
1. モデル例 ex_sfcn_rowmajor_unset を開きます。モデルには、次の追加ファイルが必要です。
S-Function:
ex_sfcn_rowmajor.cTLC:
ex_sfcn_rowmajor.tlc
これらのファイルをローカル フォルダーに保存します。
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 が配列レイアウトの影響を受けない場合、SSArrayLayout を SS_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_codeの convertNDArrayToRowMajor オプションを使用します。S-Function Builder およびレガシ コード ツールは、ノーマル モードでのシミュレーション中に S-Function が行優先の配列レイアウトに設定される場合、それに先立って転置を適用します。