Когда периодические задачи выполняются в многозадачном режиме, по умолчанию блоки с самой высокой частотой дискретизации выполняются задачей с самым высоким приоритетом, следующие самые быстрые блоки выполняются задачей со следующим более высоким приоритетом и так далее. Время, доступное между обработкой высокоприоритетных задач, используется для обработки низкоприоритетных задач. Это приводит к эффективному выполнению программы.
В тех случаях, когда задачи являются асинхронными, а не периодическими, не обязательно может существовать взаимосвязь между частотой выборки и приоритетами задач; задача с наивысшим приоритетом не должна иметь самую высокую частоту выборки. Приоритеты асинхронных задач задаются с помощью блоков асинхронного прерывания и синхронизации задач. Можно переключить представление о том, что означают номера приоритетов, выбрав или очистив параметр конфигурации модели Более высокое значение приоритета указывает на более высокий приоритет задачи.
В многозадачных средах (то есть в операционной системе реального времени) можно определить отдельные задачи и назначить им приоритеты. Для голого целевого оборудования (то есть без операционной системы реального времени) нельзя создавать отдельные задачи. Однако сгенерированные прикладные модули реализуют то, что эффективно является многозадачной схемой выполнения, используя перекрывающиеся прерывания, сопровождаемые программным переключением контекста.
Это означает, что прерывание может произойти во время выполнения другого прерывания. Когда это происходит, текущее прерывание прерывается, контекст блока с плавающей запятой (FPU) сохраняется, и прерывание с более высоким приоритетом выполняет свой код с более высоким приоритетом (то есть с более высокой частотой дискретизации). После завершения управление возвращается в вытесненный ISR.
На следующих рисунках показано, как синхронизация задач в многоскоростных системах обрабатывается генератором кода в многозадачных, псевдозадачных и однозадачных средах.

На следующем рисунке показано, как перекрывающиеся прерывания используются для реализации псевдомультитасинга. В этом случае прерывание 0 возвращается только после прерываний 1, 2 и 3.

Чтобы использовать многозадачность, выберите параметр конфигурации модели Рассматривать каждую дискретную скорость как отдельную задачу. Этот параметр активен, только если для параметра Тип решателя задано значение Fixed-step. Auto режим приводит к многозадачности, если модель имеет два или более различных времени выборки. Модель с непрерывным и дискретным временем выборки работает в режиме одной задачи, если фиксированный размер шага равен дискретному времени выборки.
В случаях, когда непрерывная часть модели выполняется со скоростью, отличной от дискретной части, или модель имеет блоки с различными скоростями дискретизации, модуль Simulink ® назначает каждому блоку идентификатор задачи (tid), чтобы связать блок с задачей, которая выполняется с частотой дискретизации блока.
Скорости выборки и их ограничения задаются на панели Решатель (Solver) диалогового окна Параметры конфигурации модели (Model Configuration Parameters). Для создания кода выберите Fixed-step для типа решателя. Некоторые ограничения применяются к выборочным ставкам, которые можно использовать:
Частота выборки блока должна быть целочисленной кратной базовому (то есть самому быстрому) периоду выборки.
Если для параметра конфигурации модели Периодическое ограничение по времени выборки задано значение unconstrainedбазовый период выборки определяется установкой параметра Фиксированный размер шага.
При установке для параметра Периодическое ограничение времени выборки значения Specified, размер фиксированного шага базовой скорости является первым элементом матрицы времени выборки, который задается для параметра Sample time properties. Панель Решатель (Solver) из примера модели rtwdemo_mrmtbb показывает пример.

Непрерывные блоки выполняются с использованием алгоритма интеграции, который выполняется с базовой частотой дискретизации. Базовый период выборки является наибольшим общим знаменателем скоростей в модели, только если для параметра конфигурации модели Периодическое ограничение времени выборки задано значение Unconstrained и параметр Фиксированный размер шага до Auto.
Непрерывная и дискретная части модели могут выполняться с различными скоростями, только если дискретная часть выполняется с той же скоростью или с более низкой скоростью, чем непрерывная часть, и является целым кратным базовой частоте дискретизации.
В этом примере рассматривается выполнение простой многоскоростной модели как в режиме реального времени, так и в режиме моделирования с использованием решателя с фиксированным шагом. Он учитывает работу в однозадачном и многозадачном режимах, что определяется настройкой параметра конфигурации модели Рассматривать каждую дискретную скорость как отдельную задачу.
Пример модели показан на следующем рисунке. Обсуждение относится к шести блокам модели от A до F, обозначенным на блок-схеме.
Порядок выполнения блоков (указанных в верхнем правом углу каждого блока) был принудительно введен в показанный порядок путем назначения более высоких приоритетов блокам F, E и D. Показанный порядок является одним из возможных действительных порядков выполнения для этой модели. Дополнительные сведения см. в разделе Фазы моделирования в динамических системах.
Порядок выполнения определяется зависимостями данных между блоками. В системе реального времени порядок выполнения определяет порядок выполнения блоков в пределах заданного временного интервала или задачи. В этом обсуждении порядок выполнения модели рассматривается как заданный, поскольку речь идет о назначении вычислений блоков задачам и планировании выполнения задач.

Примечание
Обсуждение и временные диаграммы в этом разделе основаны на предположении, что блоки Rate Transition используются в режиме по умолчанию (защищенном), при этом выбраны параметры блока Обеспечение целостности данных при передаче данных и Обеспечение детерминированной передачи данных (максимальная задержка).
В этом примере рассматривается выполнение предыдущей модели, когда для параметра конфигурации модели Tasking mode установлено значение MultiTasking. Вычисления блоков выполняются в соответствии с двумя задачами, приоритетными по скорости:
Более медленная задача, которая получает более низкий приоритет, должна выполняться каждую секунду. Это называется задачей на 1 секунду.
Более быстрая задача, которая получает более высокий приоритет, должна выполняться 10 раз в секунду. Это называется задачей на 0,1 секунды. 0,1-секундная задача может вытеснить 1-секундную задачу.
Следующая таблица показывает для каждого блока в модели порядок выполнения, задачу, под которой выполняется блок, и имеет ли блок вычисления вывода или обновления. Блоки A и B не имеют дискретных состояний и соответственно не имеют вычислений обновления.
Назначение задач блокам в многозадачном выполнении
Блоки | Задача | Продукция | Обновление |
|---|---|---|---|
E | 0,1 секундная задача | Y | Y |
F | 0,1 секундная задача | Y | Y |
D | Блок Rate Transition использует время выборки на основе порта. | Y | Y |
A | 0,1 секундная задача | Y | N |
B | Блок Rate Transition использует время выборки на основе порта. | Y | N |
C | 1 вторая задача | Y | Y |
На следующем рисунке показано планирование вычислений в MultiTasking режим решателя при развертывании сгенерированного кода в системе реального времени. Сформированная программа показана работающей в реальном времени, как две задачи под управлением прерываний от таймера 10 Гц.

На следующем рисунке показано выполнение Simulink для той же модели, в MultiTasking режим решателя. В этом случае движок Simulink запускает блоки в одном потоке выполнения, имитируя многозадачность. Вытеснение не происходит.
