範囲外の浮動小数点を整数へ変換するコ,ドの削除
この例では,範囲外の浮動小数点を整数に変換するコードを削除することで,最適化されたコードを生成する方法を説明します。標準Cは範囲外の浮動小数点から整数への変換の動作を定義しませんが,これらの変換はシミュレーション中に適切に定義されます。コンフィギュレションパラメタ[範囲外の値をラップする浮動小数点から整数への変換コ,ドを削除]を選択すると,コードジェネレーターは範囲外の浮動小数点から整数への変換を処理するラッピングコードを削除して,コードの効率を改善します。このコードを使用しない場合,範囲外の値に対するシミュレーションとコード生成の結果の間に不一致が生じる可能性があります。
アプリケーションにおける入力値が出力型の範囲にある場合,範囲外の浮動小数点から整数への変換コードを削除します。このコ,ドを削除すると,生成されたコ,ドのサ,ズが縮小し,処理が高速化します。
モデル例
モデル例rtwdemo_float_mul_for_net_slope_correction
を開きます。
模型=“rtwdemo_float_mul_for_net_slope_correction”;open_system(模型);
モデルには数据类型转换ブロックが含まれます。入力信号を单
からuint8
に変換するようにモデルを設定するには,[デ,タ型の変換]ダ@アログボックスを開きます。[出力デ,タ型]パラメ,タ,に対し,uint8
を選択します。あるいは,以下のようにコマンドラaaplンAPIを使用して,[出力デ,タ型]を設定します。
set_param ('rtwdemo_float_mul_for_net_slope_correction/数据类型转换',“OutDataTypeStr”,“uint8”);
Uint8は0から255までの値をサポ,トできます。入力信号にこの範囲外の値がある場合,範囲外の変換が行われます。
最適化を使用しないコ,ドの生成
1.ビルドと検査プロセス用に一時フォルダ,を作成します。
currentDir = pwd;[~,cgDir] = rtwdemodir();
2.[コンフィギュレションパラメタ]ダアログボックスを開きます。[最適化]ペ电子邮箱ンで,[範囲外の値をラップする浮動小数点から整数への変換コ,ドを削除]パラメ,タ,チェックボックスをオフにします。あるいは,コマンドラaaplンAPIを使用して最適化を無効にします。
set_param(模型,“EfficientFloat2IntCast”,“关闭”);
3.関数slbuild
を使用するか,“Ctrl + B”を押して,モデルをビルドします。
slbuild(模型)
# # #开始构建过程:rtwdemo_float_mul_for_net_slope_correction # # #成功完成构建过程:rtwdemo_float_mul_for_net_slope_correction模型建立目标:总结构建模型重建行动的理由 =========================================================================================================================== rtwdemo_float_mul_for_net_slope_correction代码生成和编译代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 17.608s
4.rtwdemo_float_mul_for_net_slope_correction.c
内で,生成されたステップ関数rtwdemo_float_mul_for_net_slope_correction_step
を検証します。
文件= fullfile(“rtwdemo_float_mul_for_net_slope_correction_ert_rtw”,“rtwdemo_float_mul_for_net_slope_correction.c”);rtwdemodbtype(文件,'/*模型阶跃函数*/',/*模型初始化函数, 1, 1);
/*模型步长函数*/ void rtwdemo_float_mul_for_net_slope_correction_step(void) {real32_T tmp;/* DataTypeConversion: '<根>/数据类型转换'合并:*输入:'<根>/输入' */ tmp = (real32_T)fmod((real_T)(real32_T)floor((real_T)rtU.Input), 256.0);/* Outport: '<根>/输出'合并:* DataTypeConversion: '<根>/数据类型转换'输出= (uint8_T)(tmp < 0.0F ?(int32_T) (uint8_T) (int32_T)——(int32_T) (int8_T) (uint8_T) tmp: (int32_T) (uint8_T) tmp);}
コ,ドジェネレ,タ,は,範囲外の結果を処理するために,関数在你
を適用します。この場合,生成されたコードは大きくなりますが,生成されたコードの結果はシミュレーション結果と一致します。
最適化を使用したコ,ドの生成
1.[コンフィギュレションパラメタ]ダアログボックスを開きます。[最適化]ペ电子邮箱ンで,[範囲外の値をラップする浮動小数点から整数への変換コ,ドを削除]パラメ,タ,を選択します。あるいは,コマンドラaaplンAPIを使用して最適化を有効にします。
set_param(模型,“EfficientFloat2IntCast”,“上”)
2.モデルを作成します。rtwdemo_float_mul_for_net_slope_correction.c
内で,最適化を使用して生成されたステップ関数rtwdemo_float_mul_for_net_slope_correction_step
を検証します。
slbuild(模型);文件= fullfile(“rtwdemo_float_mul_for_net_slope_correction_ert_rtw”,“rtwdemo_float_mul_for_net_slope_correction.c”);rtwdemodbtype(文件,'/*模型阶跃函数*/',/*模型初始化函数, 1, 1);
###开始构建过程:rtwdemo_float_mul_for_net_slope_correction成功完成构建过程:rtwdemo_float_mul_for_net_slope_correction构建摘要顶层模型目标:模型动作重建原因========================================================================================================== rtwdemo_float_mul_for_net_slope_correction生成和编译的代码生成的代码已过时。构建时间:0h 0m 12.984s /*模型步骤函数*/ void rtwdemo_float_mul_for_net_slope_correction_step(void){/*输出端口:'<根>/输出'合并:* DataTypeConversion: '<根>/数据类型转换' *输入:'<根>/输入' */ rtY。输出= (uint8_T)rtU.Input;}
生成されたコードは保護コードを使用しない方が効率的ですが,生成されたコードを実行しても0から255の範囲にない値に対するシミュレーションと同じ結果が得られない可能性があります。
例のフォルダおよびファルのクリンアップ
モデルを閉じて,一時フォルダ,およびファ,ルを削除します。
bdclose(模型);cd (currentDir);rtwdemoclean;
参考
範囲外の値をラップする浮動小数点から整数への変換コ,ドを削除