主要内容

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

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

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

示例模型

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

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

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

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

3.打开“配置参数”对话框。选择万博1manbetx支持:非有限数字参数复选框。选择此参数可生成非有限数据并对非有限数据进行操作。

生成不进行优化的代码

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个模型(0个模型已经更新)构建持续时间:0h 0m 12.084s

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.} else {/* Outport: '/Output'输出= 0U;}} else if (rtU。Input >= 256.0F) {/* Outport: '<根>/输出' */ rtY。输出= MAX_uint8_T;} else {/* Outport: '/Output' */ rtY.} else {/* Outport: '/Output'输出= 0U;} /*结束DataTypeConversion: '<根>/数据类型转换' */}

代码生成器将条件应用于映射以零为整数。在这种情况下,生成的代码比较大,但是生成的代码的结果与模拟结果相匹配。

优化生成代码

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个模型(0个模型已经更新)构建时间:0h 0m 8.7478s

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.} else {/* Outport: '/Output'输出= 0U;}} else {/* Outport: '/Output' */ rtY.输出。输出= MAX_uint8_T;} /*结束DataTypeConversion: '<根>/数据类型转换' */}

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

另请参阅

相关的话题