В этом примере показано, как реализовать 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)); }