主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

功能用の行優先のコードの生成

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

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

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

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

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

open_system (“ex_sfcn_rowmajor_unset”);

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

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

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

  • モデルの行優先のコードを含む既存のs函数をテストする場合,コンフィギュレーションパラメーター(行優先コード生成の外部関数互換性)の設定を[警告]または[没有一个]に設定します。コードジェネレーターは,s函数用の行優先のコードを生成せずにビルドを完了します。

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

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

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

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

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

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

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

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

静态void mdlinitializesize (SimStruct *S){/*指定数组布局的S函数*/ ssSetArrayLayoutForCodeGen(S, SS_ROW_MAJOR);. . .}

s函数が配列レイアウトの影響を受けない場合,SSArrayLayoutSS_ALLに設定します。

6.MATLABコマンドウィンドウで,次のコマンドを使用してs函数をコンパイルします。

墨西哥人ex_sfcn_rowmajor.c
建筑与gcc。墨西哥人成功完成。

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

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

関連するトピック