主要内容

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

南を整数0にマッピングするコードの削除

以下の例は,を整数ゼロにマッピングするコードの削除方法を示します。飽和が伴う浮動小数点から整数への変換に対して,金宝app仿真软件はシミュレーション中にを整数ゼロに変換します。モデルにの入力値が含まれる場合,コードジェネレーターでをゼロにマッピングするコードを生成するように指定できます。このコードを使用しない場合,標準Cではを伴うすべての条件は假と評価されるため,シミュレーションとコード生成結果の間に不一致が生じます。

アプリケーションにの入力値が存在しない場合,を整数ゼロにマッピングするコードを削除できます。このコードを削除すると,生成されたコードのサイズが縮小し,処理が高速化します。

モデル例

このモデルでは,数据类型转换ブロックは入力信号をからuint8に変換します。この例では,モデルの名前はconversion_exです。

  1. 轮廓尺寸ブロック,外港ブロックおよび数据类型转换ブロックを使用して,モデル例を作成します。

  2. 轮廓尺寸ブロックパラメーターダイアログボックスを開き,[信号属性]タブをクリックします。[データ型)パラメーターに対し,を選択します。

  3. [データ型の変換]ダイアログボックスを開きます。(出力データ型)パラメーターに対し,uint8を選択します。

  4. (整数オーバーフローで飽和)を選択します。このパラメーターを選択すると,範囲外の信号値がデータ型で表現できる最小値または最大値のいずれかと等しくなることを指定します。

  5. 数据类型转换ブロックに接続されている信号の場合,[信号プロパティ]ダイアログボックスを開きます。名前Uを入力します。コードマッピングエディターの[信号]で,[ストレージクラス]を(ImportedExtern)に設定します。

  6. 数据类型转换ブロックから出ていく信号に対して[信号プロパティ]ダイアログボックスを開きます。名前Yを入力します。コードマッピングエディターの[信号]で,[ストレージクラス]を(ImportedExtern)に設定します。

コード生成

  1. [コンフィギュレーションパラメーター][ソルバー][ソルバーオプション][タイプ]パラメーターを(固定ステップ]に設定します。

  2. [コンフィギュレーションパラメーター][最適化][詳細設定パラメーター](南を0にマッピングする飽和で浮動小数点から整数に変換するコードを削除)パラメーターを無効にします。

  3. [コンフィギュレーションパラメーター][コード生成)[レポート][コード生成レポートを作成)パラメーターと[レポートを自動的に開く]パラメーターを有効にします。

  4. [コンフィギュレーションパラメーター][コード生成)[ビルドプロセス][コード生成のみ]パラメーターを有効にします。モデルウィンドウでCtrl + Bを押します。コードの生成が完了すると,HTMLコード生成レポートが開きます。

  5. コード生成レポートでnan_int_ex.cファイルを選択し,モデルのステップ関数を表示します。の入力値の場合,が整数ゼロにマッピングされるため,生成されたコードとシミュレーションは一致します。

/* Model step function */ void nan_int_ex_step(void) {/* DataTypeConversion: '/Data TypeConversion '合并:* import: '/In1' */ if (U < 256.0) {if (U >= 0.0) {Y = (uint8_T)U;} else {Y = 0U;}} else if (U >= 256.0) {Y = MAX_uint8_T;} else {Y = 0U;}

最適化を使用したコードの生成

  1. [コンフィギュレーションパラメーター][最適化][コード生成)(整数と固定小数点)[範囲外の値をラップする浮動小数点から整数への変換コードを削除)パラメーターを有効にします。コードを生成します。

  2. コード生成レポートでnan_int_ex.cセクションを選択し,モデルのステップ関数を表示します。生成されたコードは255年をにマッピングし,整数ゼロにはマッピングしません。生成されたコードは,を整数ゼロにマッピングする追加のコードを使用しない方が効率的ですが,生成されたコードを実行しても値に対するシミュレーションと同じ結果は得られません。

/* Model step function */ void nan_int_ex_step(void) {/* DataTypeConversion: '/Data TypeConversion '合并:* import: '/In1' */ if (U < 256.0) {if (U >= 0.0) {Y = (uint8_T)U;} else {Y = 0U;}} else {Y = MAX_uint8_T;} /* DataTypeConversion的结束:'/数据类型转换' */

参考

関連するトピック