for КонструкцииВ этом примере показано, как генератор кода объединяет for петли. Созданный код использует for конструкции для представления множества моделирующих шаблонов, таких как матричный сигнал или блоки итератора. Используя анализ зависимости данных, генератор кода объединяет for конструкции для уменьшения размера статического кода и ветвления среды выполнения.
Преимущества оптимизации for контуры:
Сокращение потребления ПЗУ и ОЗУ.
Увеличение скорости выполнения.
for Образцы моделирования контуровВ модели, rtwdemo_forloop, блок переключения и блок функции MATLAB представляют for конструкции. В In1 «Параметры блока», для параметра «Размеры порта» установлено значение 10 .

Модель не содержит зависимостей данных между for итерации цикла. Поэтому генератор кода объединяет for закольцовывается в один цикл. Откройте приложение Simulink Coder или Embedded Coder, затем создайте и просмотрите код.
### Starting build procedure for: rtwdemo_forloop ### Successful completion of build procedure for: rtwdemo_forloop Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================ rtwdemo_forloop Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 25.561s
Созданный файл, rtwdemo_forloop.c, содержит код для одиночного for цикл.
/* Model step function */
void rtwdemo_forloop_step(void)
{
int32_T k;
/* MATLAB Function: '<Root>/Accum' */
/* MATLAB Function 'Accum': '<S1>:1' */
/* '<S1>:1:3' */
/* '<S1>:1:4' */
rtwdemo_forloop_Y.Out1 = 0.0;
/* '<S1>:1:5' */
for (k = 0; k < 10; k++) {
/* Switch: '<Root>/Switch' incorporates:
* Gain: '<Root>/G1'
* Gain: '<Root>/G3'
* Inport: '<Root>/In1'
* Sum: '<Root>/Sum1'
* Sum: '<Root>/Sum2'
* UnitDelay: '<Root>/Delay'
*/
if (3.0 * rtwdemo_forloop_U.In1[k] >= 0.0) {
rtwdemo_forloop_DW.Delay_DSTATE[k] = rtwdemo_forloop_U.In1[k] -
rtwdemo_forloop_DW.Delay_DSTATE[k];
} else {
rtwdemo_forloop_DW.Delay_DSTATE[k] = (rtwdemo_forloop_DW.Delay_DSTATE[k] -
rtwdemo_forloop_U.In1[k]) * 5.0;
}
/* End of Switch: '<Root>/Switch' */
/* MATLAB Function: '<Root>/Accum' */
/* '<S1>:1:5' */
/* '<S1>:1:6' */
rtwdemo_forloop_Y.Out1 += ((real_T)k + 1.0) +
rtwdemo_forloop_DW.Delay_DSTATE[k];
}
}
Закройте модель.