Моделирование для многозадачного выполнения

Режимы многозадачности и псевдомногозадачных режимов

Когда периодические задачи выполняются в многозадачном режиме, по умолчанию блоки с самой быстрой частотой дискретизации выполняются задачей с самым высоким приоритетом, следующие самые быстрые блоки выполняются задачей с следующим более высоким приоритетом и так далее. Время, имеющееся между обработкой высокоприоритетных задач, используется для обработки задач с более низким приоритетом. Это приводит к эффективному выполнению программы.

В тех случаях, когда задачи являются асинхронными, а не периодическими, не обязательно может возникнуть связь между частотой дискретизации и приоритетами задач; задача с самым высоким приоритетом не должна иметь самую быструю частоту дискретизации. Вы задаете асинхронные приоритеты задач, используя 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 использует основанные на портах шаги расчета.
Выход запусков на выход порте шага расчета менее 0,1 секунды.
Обновление запускается во шаг расчета входного порта менее 1 секунды.
Для получения дополнительной информации о шагах расчета на основе портов, см. Ссылочные шаги расчета модели.

Y

Y

A

0,1 секунды задачи

Y

N

B

Блок Rate Transition использует основанные на портах шаги расчета.
Выход запусков на выход порте шага расчета менее 0,1 секунды.
Для получения дополнительной информации о шагах расчета на основе портов, см. Ссылочные шаги расчета модели.

Y

N

C

1 секунда задачи

Y

Y

Выполнение многозадачности в реальном времени

Следующий рисунок показывает планирование расчетов в MultiTasking режим решателя, когда сгенерированный код развертывается в системе реального времени. Сгенерированная программа показана запущенной в режиме реального времени, как две задачи под управлением прерываний от таймера 10 Гц.

Моделируемое выполнение многозадачности

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

Похожие темы