Для моделей, содержащих блок 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 на on
. Без оптимизации 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 на off
. С оптимизацией, 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
.Выполните оперативные обновления для блоков Присвоения Присвоения и Шины