主要内容

範囲外の浮動小数点を整数へ変換するコ,ドの削除

この例では,範囲外の浮動小数点を整数に変換するコードを削除することで,最適化されたコードを生成する方法を説明します。標準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;

参考

関連するトピック