主要内容

控制定点效用函数的生成

优化生成的代码使用指定最小值和最大值

定点设计师™软件使用可表示的最小和最大价值和常量值,以确定是否可以优化生成的代码,例如,通过消除不必要的效用函数和饱和代码生成的代码。

这个优化结果:

  • ROM和RAM减少消费

  • 提高执行速度

当您选择优化使用指定最小值和最大值配置参数,软件考虑输入范围信息,也被称为设计最小和最大你指定的信号模型和参数。它使用这些获得最大和最小值的范围信息的下游信号模型,然后使用该派生范围信息在生成的代码尽可能的简化数学运算。

先决条件

优化使用指定最小值和最大值参数出现仅供ERT-based目标,需要嵌入式编码器®许可证在生成代码。

如何配置你的模型吗

优化更有可能:

  • 提供尽可能多的设计最小和最大信息。指定最小值和最大值的值的信号模型和参数:

    • 轮廓尺寸外港

    • 块输出

    • 块的输入,例如,MATLAB函数Stateflow图表

    • 金宝appSimulink.Signal对象

  • 在生成代码之前,测试信号的最大和最小值和参数。否则,可能导致数值优化与仿真不匹配。你可以模拟模型与仿真范围检查启用。如果出现错误或警告,生成代码之前解决这些问题。

    如何启用模拟范围检查吗

  • 使用定点数据类型binary-point-only(2的幂,)扩展。

  • 块的上游提供设计最小和最大信息尽可能接近块的输入。如果您指定最小和最大一块输出值,这些值最有可能影响下游的输出块立即。有关更多信息,请参见消除不必要的效用函数用指定最小值和最大值

如何启用优化

  1. 在配置参数对话框中,设置代码生成>系统目标文件选择一个嵌入式实时()目标(需要嵌入式编码器许可证)。

  2. 指定最小和最大设计值信号和参数模型中使用的技巧如何配置你的模型吗

  3. 选择优化>先进的参数>优化使用指定的最小和最大值配置参数。

限制

  • 这种优化不发生:

    • 多字的操作

    • 定点与斜率和偏见扩展数据类型

    • 除非部分长度为零

  • 这种优化没有考虑最大和最小值:

    • 合并块的输入。为了解决这个问题,使用一个金宝appSimulink.Signal对象的合并块输出并指定该对象的范围。

    • 总线的元素。

    • 有条件地执行子系统(如触发子系统)块直接连接到一个输出外港块。

      外港块有条件地执行子系统可以有一个初始值为只使用指定当系统不触发。在这种情况下,优化不能使用块输出的范围,因为不可能覆盖范围的初始值。

  • 精度上有限制,因为你指定的最小值和最大值作为双精度值。如果最小或最大价值的真正价值不能被表示为一个双,确保你正确地圆的最小值和最大值,这样他们的真正的设计范围。

  • 如果你的模型包含一个可重用的子系统的多个实例,每个实例使用输入信号与不同的指定最小值和最大值,这种优化为每个子系统生成的代码可能会导致不同的代码重用不发生。如果没有这种优化,金宝app仿真软件编码器™软件生成子系统和股票代码一次子系统的多个实例之间的这段代码。

消除不必要的效用函数用指定最小值和最大值

这个例子显示了如何定点设计软件使用部门操作的输入范围来确定是否能消除不必要的效用函数生成的代码。它使用fxpdemo_min_max_optimization模型。首先,你不使用生成代码指定最小值和最大值,生成的代码包含实用函数来确保除零不会发生。然后打开优化和重新生成代码。与优化,生成的代码不包含的效用函数,因为它是没有必要的输入范围。

生成代码没有使用最大和最小值

首先,生成代码没有考虑到设计的最大和最小值的第一输入部门操作显示没有优化的代码。在这种情况下,软件使用范围的两个输入,这都是uint16。与这些输入范围,不可能实现部门使用变化与指定的精度,所以生成的代码包含一个效用函数。

  1. 运行fxpdemo_min_max_optimization的例子。

  2. 在这个例子中窗口,双击视图的优化配置按钮。

    优化配置参数对话框的窗格中。

    请注意,优化使用指定最小值和最大值参数不是选中。

  3. 双击生成代码按钮。

    代码生成的报告出现。

  4. 在模型中,右键单击部门增加部分长度输出类型块。

    上下文菜单中出现。

  5. 从上下文菜单中,选择C / c++代码>导航到C / c++代码

    代码生成报告强调了生成的代码块。生成的代码包含一个调用div_repeat_u32效用函数。

    而无。Out3 =div_repeat_u32((uint32_T) rtU。把< < 16日(uint32_T) rtU。In6 1 u);

  6. 单击div_repeat_u32链接到查看效用函数,其中包含的代码来处理除零。

生成代码使用最小和最大值

接下来,生成代码为同一部门操作,考虑到这次设计的第一个输入最小和最大值产品块。这些指定最小值和最大值轮廓尺寸块直接上游的产品块。与这些输入范围,生成的代码实现了部门只需使用一个转变。它不需要生成一个部门效用函数,减少内存使用和执行时间。

  1. 双击轮廓尺寸块标记5打开参数对话框。

  2. 在块参数对话框中,选择信号的属性面板和注意:

    • 最低这个信号值1

    • 最大这个信号值One hundred.

  3. 点击好吧关闭对话框。

  4. 双击视图的优化配置按钮。

    优化配置参数对话框的窗格中。

  5. 在这个面板中,选择优化使用指定最小值和最大值参数,然后单击应用

  6. 双击生成代码按钮。

    代码生成的报告出现。

  7. 在模型中,右键单击部门增加部分长度输出类型块。

    上下文菜单中出现。

  8. 从上下文菜单中,选择C / c++代码>导航到C / c++代码

    代码生成报告强调了生成的代码块。这一次,生成的代码实现了部门移位操作,没有部门效用函数。

    tmp = rtU.In6;而无。Out3 = (uint32_T) tmp = = (uint32_T) 0 ?MAX_uint32_T:(rtU (uint32_T)。把< < 17)/ (uint32_T tmp);

修改指定的最小和最大值

最后,修改的最大和最小值的第一个输入部门操作,使其输入范围太大时保证不溢出价值发生了变化。在这里,你不能17位向右移一个16位的数字没有满溢的32位的容器。生成代码的业务操作,再次考虑的最小值和最大值。与这些输入范围,生成的代码包含一个部门效用函数,以确保不会发生溢出。

  1. 双击轮廓尺寸块标记5打开参数对话框。

  2. 在块参数对话框中,选择信号的属性面板和设置最大价值40000年,然后单击好吧关闭对话框。

  3. 双击生成代码按钮。

    代码生成的报告出现。

  4. 在模型中,右键单击部门增加部分长度输出类型块。

    上下文菜单中出现。

  5. 从上下文菜单中,选择C / c++代码>导航到C / c++代码

    代码生成报告强调了生成的代码块。生成的代码包含一个调用div_repeat_32效用函数。

    而无。Out3 = div_repeat_u32 (rtU (uint32_T)。把< < 16日(uint32_T) rtU。In6 1 u);