Асинхронное прерывание

Сгенерируйте процедуры обработки прерывания Еврокарты модуля Versa (VME) (ISRs), которые выполняют нисходящие подсистемы или блоки Синхронизации Задачи

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

Описание

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

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

  • Блок Task Sync

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

Примечание

Можно использовать блоки в библиотеке vxlib1 (Асинхронная Синхронизация Прерывания и Задачи) для симуляции и генерации кода. Эти блоки обеспечивают примеры отправной точки, чтобы помочь вам разработать авторские блоки для своего целевого окружения.

Предположения и ограничения

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

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

    sysIntEnable
    sysIntDisable
    intConnect
    intLock
    intUnlock
    tickGet

Факторы производительности

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

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

Порты

Входной параметр

развернуть все

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

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

развернуть все

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

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

  • Блок 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. ISRs, сгенерированные блоком 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. Этот порт для симуляции только. Соедините один или несколько моделируемых источников прерывания с входом симуляции.

Примечание

Прежде, чем сгенерировать код, рассмотрите блоки удаления, которые управляют входом симуляции, чтобы препятствовать тому, чтобы блоки способствовали сгенерированному коду. Также можно использовать блок Environment Controller, как объяснено в Двойном Образцовом Подходе: Генерация кода. Если вы используете блок Environment Controller, шаги расчета управления блоками способствуют шагам расчета, поддержанным в сгенерированном коде.

Представленный в R2006a