主要内容

为 Assignment 和 Bus Assignment 模块执行原位更新

重用 Bus Assignment 和 Assignment 模块的输入和输出变量

模型配置窗格: 代码生成 / 优化

描述

为 Assignment 和 Bus Assignment 模块执行就地更新参数指示代码生成器尽可能重用 Bus Assignment 和 Assignment 模块的输入和输出变量。

依赖关系

参数信号存储重用启用此参数。

设置

on (默认) | off
On

Embedded Coder® 重用 Bus Assignment 和 Assignment 模块的输入和输出变量(如果可能)。重用这些变量可减少数据副本,节省 RAM 消耗并提高代码执行速度。

Off

Embedded Coder 不重用 Bus Assignment 和 Assignment 模块的输入和输出变量。

示例

全部展开

对于包含 Bus Assignment 模块的模型,代码生成器尽可能对模块输入和输出使用相同的变量。重用这些变量可减少数据副本,节省 RAM 消耗并提高代码执行速度。

例如,在 bus_assignoptim 中,一个包含六个元素的总线信号馈入 Bus Assignment 模块和 Bus Selector 模块。Bus Assignment 模块为总线元素 a1_real_array 赋予新值。此总线信号馈入 Out1

Model containing a Bus Assignment block.

通过将为 Assignment 和 Bus Assignment 模块执行就地更新参数设置为 off 来生成不带优化的代码。在不进行优化的情况下,bus_assignoptim_step 函数包含以下代码:

void bus_assignoptim_step(void)
{
  real_T rtb_Assignment[36];
  int32_T i;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    rtb_Assignment[i] = bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    rtb_Assignment[(int32_T)(i + 22)] = (bus_assignoptim_U.In1.a1_real_array
      [(int32_T)(i + 22)] + bus_assignoptim_U.In1.a1_num) *
      bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */

  /* Outport: '<Root>/Out' incorporates:
   *  BusAssignment: '<Root>/Bus Assignment'
   *  Inport: '<Root>/In1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* BusAssignment: '<Root>/Bus Assignment' incorporates:
   *  Outport: '<Root>/Out'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] = rtb_Assignment[i];
  }
}
生成代码包含临时数组 rtb_Assignment,用于在将数据赋给 bus_assignoptim_Y.Out.a1_real_array 之前保留此数据。

通过将为 Assignment 和 Bus Assignment 模块执行就地更新参数设置为 on 来生成带优化的代码。使用优化时,bus_assignoptim_step 函数包含以下代码:

/* Model step function */
void bus_assignoptim_step(void)
{
  int32_T i;

  /* Outport: '<Root>/Out' incorporates:
   *  Inport: '<Root>/In1'
   *  SignalConversion: '<Root>/TmpBusAssignmentBufferAtBus AssignmentInport1'
   */
  bus_assignoptim_Y.Out = bus_assignoptim_U.In1;

  /* Assignment: '<Root>/Assignment' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Outport: '<Root>/Out'
   *  Product: '<Root>/Product'
   *  Selector: '<Root>/Selector'
   *  Sum: '<Root>/Sum1'
   */
  for (i = 0; i < 36; i++) {
    bus_assignoptim_Y.Out.a1_real_array[i] =
      bus_assignoptim_U.In1.a1_real_array[i];
  }

  for (i = 0; i < 2; i++) {
    bus_assignoptim_Y.Out.a1_real_array[(int32_T)(i + 22)] =
      (bus_assignoptim_U.In1.a1_real_array[(int32_T)(i + 22)] +
       bus_assignoptim_U.In1.a1_num) * bus_assignoptim_U.In2;
  }

  /* End of Assignment: '<Root>/Assignment' */
}
生成代码不包含用于保留数据的临时数组 rtb_Assignment1。生成代码直接将此数据赋给 bus_assignoptim_Y.Out.a1_real_array

推荐的设置

应用情形设置
调试无影响
可追溯性无影响
效率On
安全预警

无建议

编程用法

参数:BusAssignmentInplaceUpdate
类型:字符向量
值:'on' | 'off'
默认值:'on'

版本历史记录

在 R2017a 中推出