for
Этот пример показывает, как генератор кода комбинирует циклы for
. Сгенерированный код использует построения for
, чтобы представлять разнообразие моделирования шаблонов, таких как матричный сигнал или блоки Итератора. Используя анализ зависимости по данным, генератор кода комбинирует построения for
, чтобы уменьшать статический размер кода и ветвление во время выполнения.
Преимущества оптимизации циклов for
:
Сокращение ROM и потребления RAM.
Увеличение скорости выполнения.
for
В модели rtwdemo_forloop, блок switch и блок MATLAB function представляют построения for
. В диалоговом окне In1
Block Parameters параметр размерностей Порта устанавливается на 10
.
Модель не содержит зависимости по данным через итерации цикла for
. Поэтому генератор кода комбинирует циклы for
в один цикл. Создайте модель и просмотрите сгенерированный код.
### Starting build procedure for model: rtwdemo_forloop ### Successful completion of build procedure for model: rtwdemo_forloop
Сгенерированный файл, 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 += (1.0 + (real_T)k) + rtwdemo_forloop_DW.Delay_DSTATE[k]; } }
Закройте модель.