Для моделей, содержащих блок Bus Assignment, если это возможно, генератор кода использует ту же переменную для ввода и вывода блока. Многократное использование этих переменных уменьшает копии данных, сохраняет потребление RAM и увеличивает скорость выполнения кода.
Например, в bus_assignoptim, сигнал шины, содержащий шесть элементов, питается в блок Bus Assignment и блок Bus Selector. Блок Bus Assignment присваивает новые значения элементу шины a1_real_array. Этот сигнал шины питается в Out1.

Сгенерируйте код без оптимизации путем установки параметра Perform in-place updates for Assignment and Bus Assignment blocks на 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. Сгенерируйте код с оптимизацией путем установки параметра Perform in-place updates for Assignment and Bus Assignment blocks на 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.Выполните оперативные обновления для блоков Присвоения Присвоения и Шины