Async Interrupt

Сгенерируйте стандартные программы услуги прерывания (ISR) Versa Module Eurocard (VME), которые выполняют нисходящие подсистемы или блоки Task Sync

  • Библиотека:
  • Шаблоны Simulink Coder/асинхронные/прерывания

  • Async Interrupt block

Описание

Для каждого заданного уровня прерывания VME в примере RTOS (VxWork®), блок Async Interrupt генерирует стандартную программу обработки прерывания (ISR), которая вызывает одно из следующего:

  • Подсистема вызова функции

  • Блок Task Sync

  • Stateflow® график, сконфигурированный для входного события вызова функции

Примечание

Можно использовать блоки в vxlib1 библиотека (Async Interrupt и Task Sync) для симуляции и генерации кода. Эти блоки предоставляют примеры начальной точки, которые помогают вам разрабатывать пользовательские блоки для вашего целевого окружения.

Допущения и ограничения

  • Блок поддерживает прерывания VME с 1 по 7.

  • Блок использует эти системные вызовы RTOS (VxWorks):

    sysIntEnable
    sysIntDisable
    intConnect
    intLock
    intUnlock
    tickGet

Факторы о эффективности

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

Лучшим решением для больших подсистем является использование блока Task Sync для синхронизации выполнения подсистемы вызова функций с задачей RTOS. Поместите Task Sync блок между блоком Async Interrupt и подсистемой вызова функций. Затем блок Async Interrupt использует блок Task Sync в качестве ISR. ISR освобождает семафор синхронизации (выполняет semGive) к задаче, и возвращается сразу с уровня прерывания. Пример RTOS (VxWorks) затем запланирует и запускает задачу. См. описание блока Task Sync.

Порты

Вход

расширить все

Моделируемый источник прерывания.

Выходные аргументы

расширить все

Управляющий сигнал для:

  • Подсистема вызова функций

  • Блок Task Sync

  • Диаграмма Stateflow, сконфигурированная для входного события вызова функции

Параметры

расширить все

Массив номеров прерываний VME для устанавливаемых прерываний. Допустимая область значений значений 1..7.

Ширина выходного сигнала блока Async Interrupt соответствует количеству заданных номеров прерываний VME.

Примечание

Модель может содержать более одного блока Async Interrupt. Однако, если вы используете более одного блока Async Interrupt, не дублируйте номера прерываний VME, заданные в каждом блоке.

Массив уникальных чисел смещения вектора прерывания, соответствующих номерам прерывания VME, введенным для VME interrupt number(s) параметра. Программное обеспечение Stateflow передает смещения на вызов RTOS (VxWorks) intConnect(INUM_TO_IVEC(offset),...).

Simulink® приоритет нисходящих блоков. Каждый выход блока Async Interrupt управляет нисходящим блоком (для примера, подсистемы вызова функций). Задайте массив приоритетов, соответствующих номерам прерываний VME, которые вы задаете для VME interrupt number(s) параметра.

Значения Simulink task priority параметров требуются для генерации кода перехода скорости (см. «Переходы скорости» и «Асинхронные блоки»). Значения приоритета задачи Simulink также требуются для поддержания абсолютной целостности времени, когда асинхронная задача должна получить реальное время от своей базовой скорости или от своего вызывающего абонента. Присвоенные приоритеты обычно выше, чем приоритеты, присвоенные периодическим задачам.

Примечание

Программа Simulink не моделирует асинхронное поведение задачи. Приоритет задачи асинхронной задачи предназначен только для генерации кода и не учитывается во время симуляции.

Установите эту опцию равной 1, если выходной сигнал блока Async Interrupt управляет блоком Task Sync.

Прерывания с более высоким приоритетом могут прерывать прерывания с более низким приоритетом в примере RTOS (VxWorks). Чтобы заблокировать прерывания во время выполнения ISR, установите флаг упреждения равным 0. Эта настройка вызывает генерацию intLock() и intUnlock() вызовы в начале и конце кода ISR. Осторожно используйте блокировку прерывания, так как это увеличивает время отклика прерывания системы на прерывания в intLockLevelSet() уровень и ниже. Задайте массив флагов, соответствующих номерам прерываний VME, введенным для VME interrupt number(s) параметра.

Примечание

Количество элементов в массивах, задающих параметры VME interrupt vector offset(s) и Simulink task priority, должно совпадать с количеством элементов в массиве, заданном для VME interrupt number(s) параметра.

Если выбран, ISR, сгенерированный блоком Async Interrupt, управляет своим собственным таймером, считывая абсолютное время от оборудования таймера. Задайте размер аппаратного таймера с параметром Timer size.

Разрешение таймера ISRs. ISR, сгенерированные блоком Async Interrupt, поддерживают свои собственные абсолютные счетчики времени. По умолчанию эти таймеры получают свои значения из ядра RTOS (VxWorks) при помощи tickGet вызов. Параметр Timer resolution определяет разрешение этих счетчиков. Разрешение по умолчанию является 1/60 второе. tickGet разрешение для вашего пакета поддержки системной платы (BSP) может быть различным. Определите, tickGet разрешение для вашего BSP и введите его для Timer resolution параметра.

Если вы нацелены на RTOS, отличную от примера RTOS (VxWorks), замените tickGet вызов с эквивалентным вызовом целевой RTOS. Или сгенерируйте код, чтобы считать регистр таймера на целевом компьютере. Для получения дополнительной информации смотрите Таймеры в асинхронных задачах и Реализация блоков асинхронных прерываний.

Количество бит для хранения такта синхроимпульса в таймере оборудования. ISR, сгенерированный блоком Async Interrupt, использует размер таймера, когда вы выбираете Manage own timer параметра. Размер можно 32bits (по умолчанию), 16bits, 8bits, или auto. Если вы выбираете autoгенератор кода определяет размер таймера на основе настроек параметров Application lifespan (days) и Timer resolution.

По умолчанию значения таймера сохраняются как 32-битные целые числа. Когда Timer size параметра установлено в autoможно косвенно управлять размером слов счетчиков, задавая Application lifespan (days) параметра. Если вы задаете Application lifespan (days) значение, которое является слишком большим для генератора кода, чтобы обрабатывать как 32-битное целое число заданного разрешения, генератор кода использует второе 32-битное целое число для решения проблемы переполнения.

Для получения дополнительной информации смотрите Управление выделением памяти для счетчиков времени. Смотрите также Таймеры в асинхронных задачах.

Если выбран, программа Simulink добавляет порт входа к блоку Async Interrupt. Этот порт предназначен только для симуляции. Подключите один или несколько моделируемых источников прерывания к входу симуляции.

Примечание

Перед генерацией кода рассмотрите удаление блоков, которые управляют входом симуляции, чтобы предотвратить вклад блоков в сгенерированный код. Кроме того, можно использовать блок Контроллер, как объяснено в Dual-Model Approach: Генерация кода. Если вы используете блок Контроллер, шаги расчета ведущих блоков способствуют шагам расчета, поддерживаемым в сгенерированном коде.

Введенный в R2006a