Когда периодические задачи выполняются в многозадачном режиме, по умолчанию блоки с самыми быстрыми частотами дискретизации выполняются задачей с самым высоким приоритетом, следующие самые быстрые блоки выполняются задачей со следующим более высоким приоритетом и так далее. Время, доступное промежуточный обработка высокоприоритетных задач, используется для обработки более низких приоритетных задач. Это приводит к эффективному выполнению программы.
Где задачи являются асинхронными, а не периодическими, не может обязательно быть отношения между частотами дискретизации и приоритетами задач; задача с самой высокой первоочередной нуждой не имеет самую быструю частоту дискретизации. Вы задаете асинхронные приоритеты задач с помощью блоков Task Sync и Async Interrupt. Можно переключить смысл того, какие приоритетные числа подразумевают под выбором или очисткой параметра конфигурации модели Higher priority value indicates higher task priority.
В многозадачных средах (то есть, под операционной системой реального времени), можно задать отдельные задачи и присвоить их приоритеты. Для целевого компьютера пустого металла (то есть, никакая существующая операционная система реального времени), вы не можете создать отдельные задачи. Однако сгенерированные модули приложения реализуют то, что является эффективно многозадачной схемой выполнения с помощью перекрытых прерываний, сопровождаемых программируемым контекстным переключением.
Это означает, что прерывание может произойти, в то время как другое прерывание в настоящее время происходит. Когда это происходит, текущее прерывание вытесняется, контекст модуля с плавающей точкой (FPU) сохранен, и более высокое приоритетное прерывание выполняет свой более высокий приоритет (то есть, более быструю частоту дискретизации) код. Однажды завершенный, управление возвращено в вытесненный ISR.
Следующие фигуры иллюстрируют, как синхронизация задач в многоскоростных системах обработана генератором кода в многозадачности, псевдомногозадачности и однозадачных средах.
Следующий рисунок показывает, как перекрытые прерывания используются, чтобы реализовать псевдомногозадачность. В этом случае Прерывание 0 не возвращается до окончания Прерываний 1, 2, и 3.
Чтобы использовать многозадачное выполнение, выберите параметр конфигурации модели Treat each discrete rate as a separate task. Этот параметр активен, только если вы устанавливаете Solver type на Fixed-step
'auto'
режим приводит к многозадачной среде, если ваша модель имеет два или больше различных шага расчета. Модель с непрерывным и дискретным шагом расчета запускается в однозадачном режиме, если размер фиксированного шага равен дискретному шагу расчета.
В случаях, где непрерывная часть модели выполняется на уровне, который отличается от дискретного компонента, или модель имеет блоки с различными частотами дискретизации, Simulink® механизм присваивает каждый блок идентификатор задачи (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.
Модель в качестве примера показывают на следующем рисунке. Обсуждение относится к шести блокам модели как через F, как помечено в блок-схеме.
Порядок выполнения блоков (обозначенный в верхнем правом углу каждого блока) был обеспечен в порядок, показанный путем присвоения более высоких приоритетов блокам F, E и D. Показанное упорядоченное расположение является одним возможным допустимым упорядоченным расположением выполнения для этой модели. Для получения дополнительной информации смотрите Фазы Симуляции в Динамических системах.
Порядок выполнения определяется зависимостями по данным между блоками. В системе реального времени порядок выполнения определяет порядок, в котором блоки выполняются в данном временном интервале или задаче. Это обсуждение обрабатывает порядок выполнения модели как данный, потому что это касается выделения расчетов блока к задачам и планирования выполнения задачи.
Примечание
Обсуждение и синхронизирующие схемы в этом разделе основаны на предположении, что блоки Перехода Уровня используются в (защищенном) режиме значения по умолчанию с параметрами блоков 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 запускает блоки в одном потоке выполнения, симулируя многозадачность. Никакое вытеснение не происходит.