Async Interrupt

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

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

Описание

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

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

  • Блок Task Sync

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

Примечание

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

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

  • Блок поддерживает прерывания 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 Coder)). Значения приоритета задач 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. Или, сгенерируйте код, чтобы считать регистр таймера на целевом компьютере. Для получения дополнительной информации смотрите Таймеры в Асинхронных Задачах (Simulink Coder) и Асинхронная Реализация Блока Прерывания (Simulink Coder).

Количество битов, чтобы сохранить такт системных часов для аппаратного таймера. 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 Coder). См. также Таймеры в Асинхронных Задачах (Simulink Coder).

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

Примечание

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

Смотрите также

Введен в R2006a