Когда периодические задачи выполняются в многозадачном режиме, по умолчанию блоки с самыми быстрыми частотами дискретизации выполняются задачей с самым высоким приоритетом, следующие самые быстрые блоки выполняются задачей со следующим более высоким приоритетом и так далее. Время, доступное промежуточный обработка высокоприоритетных задач, используется для обработки более низких приоритетных задач. Это приводит к эффективному выполнению программы.
Где задачи являются асинхронными, а не периодическими, не может обязательно быть отношения между частотами дискретизации и приоритетами задач; задача с самой высокой первоочередной нуждой не имеет самую быструю частоту дискретизации. Вы задаете асинхронные приоритеты задач с помощью Асинхронных блоков Синхронизации Прерывания и Задачи. Можно переключить смысл того, какие приоритетные числа подразумевают под выбором или отменой выбора опции Решателя Higher priority value indicates higher task priority.
В многозадачных средах (то есть, под операционной системой реального времени), можно задать отдельные задачи и присвоить их приоритеты. Для целевого компьютера пустого металла (то есть, никакая существующая операционная система реального времени), вы не можете создать отдельные задачи. Однако сгенерированные модули приложения реализуют то, что является эффективно многозадачной схемой выполнения с помощью перекрытых прерываний, сопровождаемых программируемым контекстным переключением.
Это означает, что прерывание может произойти, в то время как другое прерывание в настоящее время происходит. Когда это происходит, текущее прерывание вытесняется, контекст модуля с плавающей точкой (FPU) сохранен, и более высокое приоритетное прерывание выполняет свой более высокий приоритет (то есть, более быструю частоту дискретизации) код. Однажды завершенный, управление возвращено в вытесненный ISR.
Следующие фигуры иллюстрируют, как синхронизация задач в многоскоростных системах обработана генератором кода в многозадачности, псевдомногозадачности и однозадачных средах.
Следующие данные показывают, как перекрытые прерывания используются, чтобы реализовать псевдомногозадачность. В этом случае Прерывание 0 не возвращается до окончания Прерываний 1, 2, и 3.
Чтобы использовать многозадачное выполнение, установите флажок Treat each discrete rate as a separate task на панели Solver диалогового окна Configuration Parameters. Это меню активно, только если вы выбираете Fixed-step
как тип решателя. режим Auto
приводит к многозадачной среде, если ваша модель имеет два или больше различных шага расчета. Модель с непрерывным и дискретным шагом расчета запускается в однозадачном режиме, если размер фиксированного шага равен дискретному шагу расчета.
В случаях, где непрерывная часть модели выполняется на уровне, который отличается от дискретного компонента, или модель имеет блоки с различными частотами дискретизации, механизм Simulink® присваивает каждый блок идентификатор задачи (tid
), чтобы сопоставить блок с задачей, которая выполняется на уровне частоты дискретизации блока.
Вы устанавливаете частоты дискретизации и их ограничения на панель Solver диалогового окна Configuration Parameters. Чтобы сгенерировать код, выберите Fixed-step
для типа решателя. Определенные ограничения применяются к частотам дискретизации, которые можно использовать:
Частота дискретизации блока должна быть целочисленным кратным основа (то есть, самое быстрое) демонстрационный период.
Когда Periodic sample time constraint является unconstrained
, основной демонстрационный период определяется Fixed step size, заданным на панели Solvers диалогового окна Параметров конфигурации.
Когда 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 на панели Solver.
Модель в качестве примера показывают в следующей фигуре. Обсуждение относится к шести блокам модели как через F, как маркировано в блок-схеме.
Порядок выполнения блоков (обозначенный в верхнем правом углу каждого блока) был обеспечен в порядок, показанный путем присвоения более высоких приоритетов блокам F, E и D. Показанное упорядоченное расположение является одним возможным допустимым упорядоченным расположением выполнения для этой модели. Для получения дополнительной информации смотрите Фазы Симуляции в Динамических системах (Simulink).
Порядок выполнения определяется зависимостями по данным между блоками. В системе реального времени порядок выполнения определяет порядок, в котором блоки выполняются в данном временном интервале или задаче. Это обсуждение обрабатывает порядок выполнения модели как данный, потому что это касается выделения вычислений блока к задачам и планирования выполнения задачи.
Обсуждение и синхронизирующие схемы в этом разделе основаны на предположении, на котором блоки Перехода Уровня используются в (защищенном) режиме значения по умолчанию с 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 запускает блоки в одном потоке выполнения, моделируя многозадачность. Никакое вытеснение не происходит.