このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
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函数が配列レイアウトの影響を受けない場合,SSArrayLayout
をSS_ALL
に設定します。
6.MATLABコマンドウィンドウで,次のコマンドを使用してs函数をコンパイルします。
墨西哥人ex_sfcn_rowmajor.c
建筑与gcc。墨西哥人成功完成。
7.モデルをビルドしてコードを生成するには,Ctrl + Bを押します。
s函数生成器を使用してs函数を生成する場合,s函数の優先方向を指定にはパラメーター(配列のレイアウト]を使用します。詳細については,使用S-Function Builder自动构建S-Functionを参照してください。レガシコードツールを使用したC関数の統合では,legacy_code
のconvertNDArrayToRowMajor
オプションを使用します。s函数生成器およびレガシコードツールは,ノーマルモードでのシミュレーション中にs函数が行優先の配列レイアウトに設定される場合,それに先立って転置を適用します。