exponenta event banner

Сделать цикл While

В этом примере показано, как реализовать do while построение цикла с использованием блоков Simulink и диаграмм Stateflow.

Конструкция C

num_iter = 1;
do {
   flag = func();
   num_iter++;
   }
while (flag && num_iter <= 100)

Модель моделирования для цикла Do While: While Iterator Subsystem block

Один метод создания do while loop - использовать блок While Iterator Subsystem из библиотеки Simulink > Ports and Subsystems.

1. Открыть пример модели ex_do_while_loop_SL.

Модель содержит блок While Iterator Subsystem, который повторяет выполнение содержимого подсистемы на этапе моделирования.

Соблюдайте следующие настройки в подсистеме итератора:

  • func блок подсистемы имеет выход flag из 0 или 1 в зависимости от результата алгоритма в func( ). func() является именем функции в func подсистема.

  • Для блока While Iterator максимальное число итераций равно 100.

  • Для блока While Iterator типом цикла While является 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));
}

Шаблон моделирования для цикла Do While: диаграмма потока состояний

1. Открыть пример модели ex_do_while_loop_SF.

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

Диаграмма содержит 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));
}

См. также

Связанные темы