这个例子展示了如何使用的最大值和最小值中生成的代码优化定点运算您在模型中指定。
最小值和最大值可表示环境限制或机械限制,例如传感器的输出范围。代码生成软件可以使用这些值通过消除不可达代码分支的和不必要的效用函数来创建更高效的代码。
注意:你必须确保规定的最低和最高值是准确的,值得信赖。否则,优化可能导致与模拟数字不匹配。
优化生成的代码的好处是:
减少了ROM和RAM消耗。
提高执行速度。
打开模型fxpdemo_min_max_optimization。
open_system('fxpdemo_min_max_optimization');
在该模型中,存在的各种定点块中的输入端口指定的最小值和最大值上游。通过使用这些值,模型中的每个定点运算以某种方式进行了优化。
首先,不使用指定的最小值和最大值,产生该模型的代码。双击蓝色按钮。
rtwbuild('fxpdemo_min_max_optimization');
###启动构建过程:fxpdemo_min_max_optimization ###代码生成的成功完成:fxpdemo_min_max_optimization
一个HTML代码生成报表打开。检查对应于块“具有减少的分数长度输出数据类型产品”的代码。此块上单击鼠标右键,并选择代码生成>导航到代码...。
rtwtrace(“fxpdemo_min_max_optimization /产品具有降低的分数长度输出数据类型”);
生成的代码是:
rtY.Out1 = mul_u32_u32_u32_sr10(rtU.In1,rtU.In2);
要实现此定点乘法运算,代码生成软件必须产生一个效用函数mul_u32_u32_u32_sr10
。此外,为了实现mul_u32_u32_u32_sr10
,它必须产生一个第二个利用率函数,mul_wide_u32
。这些功能包括多行代码,需要几个临时变量。
双击黄色按钮,打开配置参数对话框。
在此对话框中,下代码生成, 选择使用指定的最小值和最大值优化。
set_param('fxpdemo_min_max_optimization','UseSpecifiedMinMax','上');
现在重新使用指定的最小值和最大值的代码。
双击蓝色按钮。
rtwbuild('fxpdemo_min_max_optimization');
###启动构建过程:fxpdemo_min_max_optimization ###代码生成的成功完成:fxpdemo_min_max_optimization
右击块“产品具有减少的分数长度输出数据类型”,并选择代码生成>导航到代码...。
rtwtrace(“fxpdemo_min_max_optimization /产品具有降低的分数长度输出数据类型”);
生成的代码是:
rtY.Out1 = rtU.In1 * rtU.In2 >> 10;
使用指定的最小值和最大值,将码生成软件确定它可以安全地实现在与右移位的输出减小的分数的长度,并且不产生实用函数。
检查等操作在生成的代码,看看代码生成软件如何使用指定的最小值和最大值。代码生成软件现在实现用简单的C这样的操作每个固定点操作和消除了不必要的辅助功能和代码分支。