Когда периодические задачи выполняются в многозадачном режиме, по умолчанию блоки с самой быстрой частотой дискретизации выполняются задачей с самым высоким приоритетом, следующие самые быстрые блоки выполняются задачей с следующим более высоким приоритетом и так далее. Время, имеющееся между обработкой высокоприоритетных задач, используется для обработки задач с более низким приоритетом. Это приводит к эффективному выполнению программы.
В тех случаях, когда задачи являются асинхронными, а не периодическими, не обязательно может возникнуть связь между частотой дискретизации и приоритетами задач; задача с самым высоким приоритетом не должна иметь самую быструю частоту дискретизации. Вы задаете асинхронные приоритеты задач, используя Async Interrupt и Task Sync блоки. Можно переключить представление о значении чисел приоритетов путем выбора или очистки параметра конфигурации <reservedrangesplaceholder0> модели.
В многозадачных окружениях (то есть под операционной системой реального времени) можно задать отдельные задачи и присвоить им приоритеты. Для голых целевых компьютеров (то есть операционной системы в реальном времени нет) нельзя создавать отдельные задачи. Однако сгенерированные прикладные модули реализуют то, что эффективно является схемой выполнения многозадачности, используя перекрывающиеся прерывания, сопровождаемые программным переключением контекста.
Это означает, что прерывание может произойти, пока другое прерывание находится в прогрессе. Когда это происходит, текущее прерывание вытесняется, контекст модуля с плавающей точкой (FPU) сохраняется, и более высокий приоритет прерывания выполняет свой код с более высоким приоритетом (то есть более высокой частотой дискретизации). После завершения управление возвращается к превентивному ISR.
Следующие рисунки иллюстрируют, как синхронизация задач в многоцелевых системах обрабатывается генератором кода в многозадачных псевдозадачных и однозадачных окружениях.
Следующий рисунок показывает, как перекрывающиеся прерывания используются для реализации псевдомултитаскинга. В этом случае Прерывание 0 возвращается только после Прерывания 1, 2 и 3.
Чтобы использовать выполнение многозадачности, выберите Treat each discrete rate as a separate task параметра конфигурации модели. Этот параметр активен, только если вы задаете Solver type Fixed-step
. Auto
mode результатов в многозадачном окружении, если ваша модель имеет два или более различных шагов расчета. Модель с непрерывным и дискретным шагом расчета запускается в однозадачном режиме, если размер фиксированного шага равен дискретному шагу расчета.
В случаях, когда непрерывная часть модели выполняется со скоростью, отличной от дискретной части, или модель имеет блоки с различными скоростями дискретизации, Simulink® engine присваивает каждому блоку идентификатор задачи (tid
), чтобы связать блок с задачей, которая выполняется с частотой дискретизации блока.
Частоты дискретизации и их ограничения устанавливаются на панели Solver диалогового окна Параметры конфигурации модели (Model Configuration Parameters). Чтобы сгенерировать код, выберите Fixed-step
для типа решателя. Определенные ограничения применяются к частотам дискретизации, которые можно использовать:
Частота дискретизации блока должна быть целым числом, кратным базовому (то есть самому быстрому) периоду дискретизации.
Когда вы устанавливаете параметр конфигурации модели Periodic sample time constraint равным unconstrained
базовый период дискретизации определяется настройкой Fixed step size параметра.
Когда вы устанавливаете Periodic sample time constraint параметра на Specified
, размер фиксированного шага базовой скорости является первым элементом матрицы шага расчета, который вы задаете для Sample time properties параметра. Панель Solver из модели примера rtwdemo_mrmtbb
показывает пример.
Непрерывные блоки выполняются с помощью алгоритма интегрирования, который запускается с базовой частотой дискретизации. Базовый период дискретизации является наибольшим общим знаменателем скоростей в модели, только когда вы задаете Periodic sample time constraint параметра конфигурации модели Unconstrained
и Fixed step size параметров в Auto
.
Непрерывная и дискретная части модели могут выполняться с различными скоростями только, если дискретная часть выполнена с той же или более медленной скоростью, чем непрерывная часть, и является целым числом, кратным базовой скорости дискретизации.
В этом примере рассматривается, как простая многоскоростная модель выполняется как в реальном времени, так и в симуляции, с помощью решателя с фиксированным шагом. Он рассматривает операцию как в однозадачном, так и в многозадачном режимах, как определяется настройкой параметра конфигурации модели Treat each discrete rate as a separate task.
Пример модели показан на следующем рисунке. Обсуждение относится к шести блокам модели как A-F, как обозначено в блок-схеме.
Порядок выполнения блоков (указанный в правом верхнем углу каждого блока) был принудительно приведен в порядок, показанный путем присвоения более высоких приоритетов блокам F, E и D. Показанное упорядоченное расположение является одним из возможных допустимых упорядоченных расположений выполнения для этой модели. Для получения дополнительной информации смотрите Фазы симуляции в динамических системах.
Порядок выполнения определяется зависимостями данных между блоками. В системе реального времени порядок выполнения определяет порядок, в котором блоки выполняются в течение заданного временного интервала или задачи. Это обсуждение рассматривает порядок выполнения модели как заданный, потому что это касается распределения расчетов блоков для задач и планирования выполнения задачи.
Примечание
Обсуждение и временные диаграммы в этом разделе основаны на предположении, что блоки Rate Transition используются в режиме по умолчанию (protected) с параметрами блоков Ensure data integrity during data transfer и Ensure deterministic data transfer (maximum delay) выбраны
Этот пример рассматривает выполнение предыдущей модели, когда 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 запускает блоки в одном потоке выполнения, симулируя многозадачность. Прерывание не происходит.