主要内容

删除超出范围的浮点到整数转换的代码

此示例展示了如何通过删除超出范围的浮点到整数转换的代码来生成优化的代码。标准C没有定义超出范围的浮点到整数转换的行为,但是在模拟过程中定义了这些转换。当您选择配置参数时删除从浮点到整数转换中包装超出范围值的代码,代码生成器删除了处理超出范围的浮点到整数转换的包装代码,并提高了代码效率。如果没有这些代码,对于超出范围的值,模拟和代码生成结果之间可能会不匹配。

如果应用程序中的输入值在输出类型的范围内,请删除超出范围的浮点到整数转换的代码。删除此代码可以减小生成代码的大小并提高生成代码的速度。

示例模型

打开示例模型rtwdemo_float_mul_for_net_slope_correction

模型=“rtwdemo_float_mul_for_net_slope_correction”;open_system(模型);

该模型包含一个数据类型转换块。将模型配置为将输入信号从a到一个uint8,打开“数据类型转换”对话框。为输出数据类型参数,选择uint8.或者,使用这个命令行API来设置输出数据类型

set_param ('rtwdemo_float_mul_for_net_slope_correction/数据类型转换'“OutDataTypeStr”“uint8”);

uint8支持0 ~ 2金宝app55的值。如果输入信号的值超出了这个范围,就会发生范围外转换。

生成没有优化的代码

1.为构建和检查过程创建临时文件夹。

currentDir = pwd;[~,cgDir] = rtwdemodir();

2.打开“配置参数”对话框。在“优化”窗格中,清除删除从浮点到整数转换中包装超出范围值的代码参数复选框。或者,使用命令行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 9.7115秒

4.检查生成的rtwdemo_float_mul_for_net_slope_correction_step阶跃函数rtwdemo_float_mul_for_net_slope_correction.c

文件= 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.打开“配置参数”对话框。在“优化”窗格上,选择删除从浮点到整数转换中包装超出范围值的代码参数。或者,使用命令行API来启用优化:

set_param(模型,“EfficientFloat2IntCast”“上”

2.构建模型。检查生成的rtwdemo_float_mul_for_net_slope_correction_step步进函数与优化中的rtwdemo_float_mul_for_net_slope_correction.c

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 8.4469s /*模型步骤函数*/ void rtwdemo_float_mul_for_net_slope_correction_step(void){/*输出端口:'<根>/输出'合并:* DataTypeConversion: '<根>/数据类型转换' *输入:'<根>/输入' */ rtY。输出= (uint8_T)rtU.Input;}

如果没有保护代码,生成的代码会更有效,但是对于不在0到255范围内的值,执行生成的代码可能不会产生与模拟相同的结果。

清理示例文件夹和文件

关闭模型并删除临时文件夹和文件。

bdclose(模型);cd (currentDir);rtwdemoclean;

另请参阅

相关的话题