主要内容

删除用于整数转换的范围浮点的代码

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

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

示例模型

打开示例模型rtwdemo_float_mul_for_net_slope_correction

模型='rtwdemo_float_mul_for_net_slope_correction';Open_System(模型);

该模型包含数据类型转换块。配置模型以从一个转换输入信号单身的UINT8,打开数据类型转换对话框。为了输出数据类型参数,选择UINT8。或者,使用此命令行API设置输出数据类型

set_param('rtwdemo_float_mul_for_net_slope_correction/data类型转换',,,,“ OutdatatyPest”,,,,'uint8');

UINT8可以支持从0到万博1manbetx255的值。如果输入信号在此范围以外的值之外的值,则会发生过度范围的转换。

无需优化生成代码

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

CurrentDir = PWD;[〜,cgdir] = rtwdemodir();

2.打开“配置参数”对话框。在优化窗格上,清除将代码从浮点数转换为包装端外值的整数转换参数复选框。或者,使用命令行API禁用优化:

set_param(型号,“效率float2intcast”,,,,'离开');

3.使用Slbuild功能或按下Ctrl+b

Slbuild(型号)
### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction ### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction Build Summary Top model targets built: Model Action Rebuild Reason =================================================================================================================== rtwdemo_float_mul_for_net_slope_correction代码生成和编译的代码生成信息文件不存在。1个型号中的1个型号(0个模型已经最新)构建持续时间:0H 0M 17.608S

4.检查生成的rtwdemo_float_mul_for_net_slope_correction_step步骤功能rtwdemo_float_mul_for_net_slope_correction.c

file = fullfile('rtwdemo_float_mul_for_net_slope_correction_ert_ert_rtw',,,,'rtwdemo_float_mul_for_net_slope_correction.c');rtwdemodbtype(文件,'/ *模型步骤功能 */',,,,'/*模型初始化函数',1,1);
/ *模型步骤函数 */ void rtwdemo_float_mul_for_net_slope_slope_correction_step(void){real32_t tmp;/ * datatypeconversion:'/数据类型转换'并入: * inport:'/input' */tmp =(real32_t)fmod(real_t)(real_t)(real32_t)floor((real_t)floor((real_t)rtu.input),rtu.input),rtu.input),256.0);/ * outport:'<根>/输出'并入: * datatypeconversion:'/data类型转换' */rty.output =(uint8_t)(tmp <0.0F?(int32_t)(int8_t)(uint8_t)-tmp:(int32_t)(uint8_t)tmp);}

代码生成器应用fmod处理范围内的功能。在这种情况下,生成的代码更大,但生成的代码的结果与仿真结果匹配。

使用优化生成代码

1.打开“配置参数”对话框。在优化窗格上,选择将代码从浮点数转换为包装端外值的整数转换范围。或者,使用命令行API启用优化:

set_param(型号,“效率float2intcast”,,,,'上'

2.构建模型。检查生成的rtwdemo_float_mul_for_net_slope_correction_step在优化的步骤功能rtwdemo_float_mul_for_net_slope_correction.c

slbuild(型号);file = fullfile('rtwdemo_float_mul_for_net_slope_correction_ert_ert_rtw',,,,'rtwdemo_float_mul_for_net_slope_correction.c');rtwdemodbtype(文件,'/ *模型步骤功能 */',,,,'/*模型初始化函数',1,1);
### Starting build procedure for: rtwdemo_float_mul_for_net_slope_correction ### Successful completion of build procedure for: rtwdemo_float_mul_for_net_slope_correction Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================== rtwdemo_float_float_mul_for_for_for_net_slope_corpe_corpection_correction_correction_correction_correction_correction_correction代码和编译的生成的代码未止于。1 of 1 models built (0 models already up to date) Build duration: 0h 0m 12.984s /* Model step function */ void rtwdemo_float_mul_for_net_slope_correction_step(void) { /* Outport: '/Output' incorporates: * DataTypeConversion: '/数据类型转换' * inport:'/input' */rty.output =(uint8_t)rtu.input;}

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

清理示例文件夹和文件

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

bdclose(模型);CD(CurrentDir);rtwdemoclean;

也可以看看

相关话题