В этом примере показано, как реализовать do while построение цикла при помощи блоков Simulink и диаграмм Stateflow.
num_iter = 1;
do {
flag = func();
num_iter++;
}
while (flag && num_iter <= 100)
Один метод для создания do while цикл должен использовать некоторое время блок Subsystem Итератора от библиотеки Simulink> Ports и Subsystems.
1. Открытая модель ex_do_while_loop_SL в качестве примера.

Модель содержит некоторое время блок Subsystem Итератора, который повторяет выполнение содержимого подсистемы во время шага времени симуляции.
Наблюдайте следующие настройки в В то время как Подсистема Итератора:
func блок подсистемы имеет выход flag из 0 или 1 в зависимости от результата алгоритма в func( )func Имя функции в func подсистема.
Для, В то время как блок Iterator, Максимальным количеством итераций является 100.
Для, В то время как блок Iterator, типом Цикла с условием продолжения является do-while.
2. Чтобы создать модель и сгенерировать код, нажмите Ctrl+B.
Код, реализующий do while цикл находится в ex_do_while_loop_SL_step функция в ex_do_while_loop_SL.c:
/* Model step function */
void ex_do_while_loop_SL_step(void)
{
int32_T s1_iter;
/* Outputs for Iterator SubSystem: '<Root>/While Iterator Subsystem' incorporates:
* WhileIterator: '<S1>/While Iterator'
*/
s1_iter = 1;
/* SystemReset for Atomic SubSystem: '<S1>/func' */
func_Reset();
/* End of SystemReset for SubSystem: '<S1>/func' */
/* End of Outputs for SubSystem: '<Root>/While Iterator Subsystem' */
do {
func();
s1_iter++;
} while (flag && (s1_iter <= 100));
}
1. Открытая модель ex_do_while_loop_SF в качестве примера.

В модели, ex_do_while_loop_SF/Chart выполняет do while цикл.

График содержит While шаблон решения цикла, который вы добавляете путем выбора Chart> Add Pattern in Chart> Loop> While.
2. Чтобы создать модель и сгенерировать код, нажмите Ctrl+B.
Код, реализующий do while цикл находится в ex_do_while_loop_SF_step функция в ex_do_while_loop_SF.c:
/* Model step function */
void ex_do_while_loop_SF_step(void)
{
int32_T num_iter;
/* Chart: '<Root>/Chart' */
num_iter = 1;
do {
func();
num_iter++;
} while (flag && (num_iter <= 100));
}