コド効率化ドの最適化
モデルアドバザを使用してコド生成のためにモデルを最適化する
モデルアドバイザーを使うと,コード生成に向けてモデルを解析して,量産展開の妨げやコード効率の制限となるモデルの問題点を検出できます。モデルの現在のコンフィギュレ,ションに対して実行する検査の集合から選択できます。モデルアドバ。モデルアドバイザーの診断のほとんどは,モデルがコンパイルされた状態になっていることを要求しませんが,必要な場合はその旨ただし書きがあります。
モデルアドバザを実行する前に,コド生成で指定する予定のタゲットを選択します。モデルアドバイザーはERTおよびERTベースのシステムターゲットファイルで最も効果的に動作します。
モデルアドバイザーを使用してコード生成用にモデルを最適化する方法について調べるには,次の例を参照してください。
メモ
モデル例のrtwdemo_advisor2
とrtwdemo_advisor3
には状态流®と定点设计器™ソフトウェアが必要です。
モデルアドバザの使用方法の詳細にいては,モデルアドバ▪▪ザ▪▪チェックの実行を参照してください。チェックの詳細にいては,金宝appSimulink Coderのチェックを参照してください。
状态流オブジェクトの生成コ,ドを最適化するための設計上のヒント
グラフィカル関数内の,マシンを親とするデ,タにはアクセスしない
この制限を設けると,グラフィカル関数に対して生成されたコードには,パラメーターの長いリストが表示されません。グラフィカル関数と同じチャ,トに存在するロ,カルデ,タにはアクセスできます。詳細にいては,グラフィカル関数の定義によるロジックパタ,ンの再利用(Stateflow)を参照してください。
グラフィカル関数の▪▪ンラ▪▪ンオプションを明示する
Stateflowチャ,トでグラフィカル関数を使用する場合は,[関数epンラepンオプション]プロパティとして[huawei @ 123] [huawei @ 123]
または[関数]
を選択します。そうしないと,グラフィカル関数に対して生成されたコ,ドが希望とおりに表示されない場合があります。詳細にいては,グラフィカル関数のプロパティの指定(Stateflow)を参照してください。
状态流チャ,トで複数のエッジトリガ,econfベントを使用しない
1つ以上のトリガーを使用する場合は,立ち上がりエッジまたは立ち下がりエッジの検出を処理する複数のコードステートメントを生成します。複数のトリガが必要な場合は,代わりに関数呼び出しベントを使用します。詳細にいては,入力ベントの送信によるstatflowチャトのアクティブ化(Stateflow)を参照してください。
チャ,トの入力信号を単一のバスオブジェクトに統合する
バスオブジェクトを使用する場合は,生成される関数のパラメーターリストに含まれるパラメーターを減らします。このガドランは,チャトの出力信号にも適用されます。詳細にいては,Stateflow構造体の定義(Stateflow)を参照してください。
離散サンプル時間によるチャ,トの使用
触发子系统または启用子系统内にない離散チャート用に生成されたコードでは,仿真软件金宝app®が提供する時間ではなく,整数カウンタ,を使用して時間を追跡します。これにより,オーバーヘッドおよびメモリの観点からより効率的なコード生成が可能になるほか,ソフトウェアインザループ(SIL)およびプロセッサインザループ(公益诉讼)のシミュレーションでこのコードが使用可能になります。
その他の最適化手法
コ,ド生成用にモデルを最適化するために次の手法を適用できます。
嵌入式编码器®ユ,ザ,の場合,アプリケ,ションで整数演算のみ使用する場合,[@ @ @ @ @ @ @ @ @ @ @ @]ペereplicationンの[ソフトウェア環境]セクションで[サポ,ト:浮動小数点数]パラメ,タ,をオフにして,生成コ,ドに浮動小数点デ,タまたは演算が含まれないようにします。このパラメ,タ,がオフの場合,コ,ド生成中に非整数デ,タまたは式が発生すると,エラ,が生じます。エラ,メッセ,ジには問題のブロックおよびパラメ,タ,が示されます。
[コンフィギュレ,ションパラメ,タ,]、[コ,ド生成]、[@ @ @ @ @ @ @ @ @ @ @ @]、[詳細設定パラメ,タ,]、[matファ蓉区ルのログ]パラメ,タ,を無効にします。このパラメーターをオフにすると,ログ変数の初期化,更新,およびクリーンアップに必要な追加のコードおよびメモリ使用量が除外されます。さらに,matファルのログをサポトするために生成されたコドは
malloc
を呼び出します。これは,アプリケ,ションに望ましくない可能性があります。アップグレードアドバイザーを使用して,現在の機能を使用するために古いモデルをアップグレード(以前のバージョンまたは現在のバージョンで保存)します。詳細にいては,モデルのアップグレ,ドを参照してください。
ビルドの前に,コンパ电子邮件ラに最適化フラグ(たとえば,
- 02
を海湾合作委员会
に,不
を微软®Visual c++®コンパaapl . aapl .ラに)を設定します。s函数のTLCファイルを書いて,C / c++函数を生成されたコードに直接インライン化します。詳細にいては,モデルまたはサブシステムのS-Functionタ,ゲットの使用および内联C MEX s -函数を参照してください。
可能な限り
双
以外のS金宝appimulinkデ,タ型を使用します。使用可能なデ,タ型は,布尔
,符号付きと符号なしの8,16,32ビット整数,および32,64ビット浮動小数点数です(双
は64ビット浮動小数点数)。詳細にいては,金宝appSimulinkにおけるデタ型にいてを参照してください。ブロックごとの要約の表示には、showblockdatatypetable
をクリックするか,そのコマンドをコマンドウィンドウに入力してください。生成されたコード内のメモリに保存するように設定した調整可能なブロックパラメーターの場合,パラメーターのデータ型と信号データ型を一致させることで,不要な型変換とCシフトを排除できます。可能な限り,パラメ,タ,値は小さな整数デ,タ型に保存してください。生成されたコ,ドにおけるパラメ,タ,のデ,タ型を参照してください。
ルックアップテ,ブルデ,タで繰り返されている値を削除します。
合并ブロックを使って,可能な限り信号の出力をマ,ジします。Stateflowチャートで函数调用子系统の実行を制御する必要があるとき,このブロックは特に役に立ちます。次のモデルは合并ブロックをどう使用するかの例を示します。
合并ブロックに接続された1を超える信号が
汽车
以外のストレジクラスをも場合,そのブロックに接続されたすべての汽车
以外の信号は,同じ名前で同じストレ,ジクラスをもたなければなりません。合并ブロック同士が直接接続される場合,そのグループの合并ブロックに接続される信号にこれらのルールが適用されます。