主要内容

删除将NaN映射为整数0的代码

这个例子展示了如何删除映射的代码到整数0。对于涉及饱和的浮点到整数的转换,Simulink®在模拟过程中将NaN转换为整数零。金宝app如果模型包含的输入值为,您可以指定代码生成器生成将NaN映射为0的代码。如果没有这些代码,模拟和代码生成结果之间就会不匹配,因为在标准C中,每个条件都涉及到计算结果为false。

如果输入值为如果您的应用程序中不存在,您可以删除将NaN映射为整数0的代码。删除此代码可以减小生成代码的大小并提高生成代码的速度。

示例模型

打开示例模型rtwdemo_float_mul_for_net_slope_correction在命令窗口中输入模型名称。

该模型包含一个数据类型转换块。配置模型以转换输入信号从到一个uint8

1.打开“数据类型转换”对话框。为输出数据类型参数,选择uint8

2.选择饱和整数溢出参数复选框。选择此参数指定超出范围的信号值等于该数据类型可以表示的最小值或最大值。

3.打开“配置参数”对话框。选择金宝app支持:非有限数参数复选框。选择此参数可以生成非有限数据并对非有限数据进行操作。

生成没有优化的代码

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

2.打开“配置参数”对话框。在“优化”窗格中,清除删除将NaN映射为零的浮点到整数转换的饱和代码参数复选框。

3.构建模型。

# # #开始构建过程: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 10.325s

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

/*模型步函数*/ void rtwdemo_float_mul_for_net_slope_correction_step(void) {/* DataTypeConversion: '<根>/数据类型转换'合并:* Inport: '<根>/输入' */ if (rtU。输入< 256.0F) {if (rtU。输入> = 0.0 f){/ *外港:根> < /输出的* /而无。输出= (uint8_T)rtU.Input;} else {/* Outport: '<根>/Output' */ rtY.输出。输出= 0U;}} else if (rtU。Input >= 256.0F) {/* Outport: '<根>/Output' */ rtY。Output = MAX_uint8_T;} else {/* Outport: '<根>/Output' */ rtY.输出。输出= 0U;} /* DataTypeConversion: '<根>/数据类型转换' */}

代码生成器将条件应用于映射到整数0。在这种情况下,生成的代码更大,但生成的代码的结果与模拟结果匹配。

使用优化生成代码

1.打开“配置参数”对话框。

2.在“优化”窗格上,选择删除将NaN映射为零的浮点到整数转换的饱和代码参数。

3.构建模型。

# # #开始构建过程: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 8.8098s

4.检查生成的rtwdemo_float_mul_for_net_slope_correction_step步进函数与优化中的rtwdemo_float_mul_for_net_slope_correction.c

/*模型步函数*/ void rtwdemo_float_mul_for_net_slope_correction_step(void) {/* DataTypeConversion: '<根>/数据类型转换'合并:* Inport: '<根>/输入' */ if (rtU。输入< 256.0F) {if (rtU。输入> = 0.0 f){/ *外港:根> < /输出的* /而无。输出= (uint8_T)rtU.Input;} else {/* Outport: '<根>/Output' */ rtY.输出。输出= 0U;}} else {/* Outport: '/Output' */ rtY.输出。Output = MAX_uint8_T;} /* DataTypeConversion: '<根>/数据类型转换' */}

生成的代码映射到255,而不是整数0。如果没有将NaN映射为整数0的额外代码,生成的代码将更加高效。但是,所生成的代码的执行可能不会产生与模拟相同的结果值。

另请参阅

相关的话题