减少生成代码中 Bus Assignment 模块的数据副本
对于包含 Bus Assignment 模块的模型,如果可能,代码生成器会使用相同的变量作为模块的输入和输出。重用这些变量可以减少数据复制、节省 RAM 消耗并提高代码执行速度。
示例模型
例如,在 bus_assignoptim 中,包含六个元素的总线信号馈入 Bus Assignment 模块和 Bus Selector 模块。Bus Assignment 模块为总线元素 a1_real_array 分配新值。该总线信号馈入 Out1。

生成不带优化的代码
通过将为 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。另请参阅
为 Assignment 和 Bus Assignment 模块执行原位更新