Task Sync

Запустите код нисходящей подсистемы вызова функций или диаграммы Stateflow путем порождения примера RTOS (VxWorks) задача

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

Описание

Блок Task Sync порождает пример RTOS (VxWorks) задача, которая вызывает график Stateflow® или подсистема вызова функций. Как правило, вы помещаете блок Task Sync между блоком Async Interrupt и блоком подсистемы вызова функций или диаграммой Stateflow. В качестве альтернативы вы могли соединить блок Task Sync с выходным портом схемы Stateflow, которая имеет событие, Output to Simulink, сконфигурированный как вызов функции.

Блок Task Sync:

  • Использует RTOS (VxWorks) системный вызов taskSpawn порождать независимую задачу. Когда задача активируется, она вызывает нисходящий код подсистемы вызова функций или диаграмму Stateflow. Блок вызывает taskDelete удалить задачу во время завершения модели.

  • Создает семафор, чтобы синхронизировать связанную подсистему с выполнением блока.

  • Переносит порожденную задачу в бесконечный for цикл. В цикле порожденная задача прислушивается к семафору при помощи semTake. Первый вызов semTake задает NO_WAIT. Эта установка позволяет задаче определить ли второй semGive произошел перед завершением подсистемы вызова функций или графика. Эта последовательность указывает, что уровень прерывания слишком быстр, или приоритет задач является слишком низким.

  • Генерирует код синхронизации (например, semGive()). Этот код позволяет порожденной запущенной задаче. Задача в свою очередь вызывает связанный код подсистемы вызова функций. Код синхронизации может запуститься на уровне прерывания. Связь между Async Interrupt и блоками Task Sync выполняет эту операцию и инициировала выполнение блока Task Sync в ISR.

  • Абсолютное время предоставлений, если блоки в нисходящем алгоритмическом коде требуют его. Время настает от таймера, обеспеченного блоком Async Interrupt, или прибывает из независимого таймера, обеспеченного задачей, сопоставленной с блоком Task Sync.

Когда вы проектируете свое приложение, рассматриваете, когда таймер и сигнализирует, что входные значения могли быть взяты для нисходящей подсистемы вызова функций, которая соединяется с блоком Task Sync. По умолчанию время и входные данные читаются, когда RTOS (VxWorks) активирует задачу. Для этого случая данные (вход и время) синхронизируются с самой задачей. Если вы выбираете опцию Synchronize the data transfer of this task with the caller task, и драйвер блока Task Sync является блоком Async Interrupt, время и входные данные читаются, когда прерывание происходит (то есть, в ISR). Для этого случая данные синхронизируются с вызывающей стороной блока Task Sync.

Примечание

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

Порты

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

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

Вызов от блока Async Interrupt.

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

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

Вызов подсистемы вызова функций.

Параметры

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

Первый аргумент передал taskSpawn системный вызов в RTOS. RTOS (VxWorks) использует это имя в качестве имени функции задачи. Это имя также служит помощью для отладки. Стандартные программы используют имя задачи, чтобы идентифицировать задачу, от которой они называются.

Приоритет задач RTOS присвоен задаче подсистемы вызова функций, когда порождено. RTOS (VxWorks) приоритеты лежат в диапазоне от 0 до 255 с 0 представлениями самого высокого приоритета.

Примечание

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

Максимальный размер, до которого может вырасти стек задачи. Размер стека выделяется, когда RTOS (VxWorks) порождает задачу. Выберите размер стека на основе количества локальных переменных в задаче. Определите размер путем исследования сгенерированного кода на задачу (и функции, которые вызваны от сгенерированного кода).

Если не выбранный (значение по умолчанию),

  • Блок обеспечивает таймер, который предоставляет абсолютные временные стоимости, требуемые расчетами нисходящих блоков. Таймер независим от таймера, обеспеченного блоком Async Interrupt, который вызывает блок Task Sync.

  • Опция Timer resolution появляется.

  • Опция Timer size задает размер слова счетчика времени.

Если выбрано,

  • Блок не обеспечивает независимый таймер и не отображает поле Timer resolution.

  • Нисходящие блоки, которые требуют таймеров, используют таймер, обеспеченный блоком Async Interrupt, который вызывает блок Task Sync (см. Таймеры в Асинхронных Задачах). Значение таймера читается в то время, когда асинхронное прерывание обслуживается. Передачи данных с блоками, вызванными блоком Task Sync, выполняются в задаче, сопоставленной с блоком Async Interrupt. Поэтому передачи данных синхронизируются с вызывающей стороной.

Разрешение таймера блока в секундах. Эта опция появляется, только если Synchronize the data transfer of this task with the caller task не выбран. По умолчанию блок получает значение таймера путем вызова tickGet функция в RTOS (VxWorks). Разрешение по умолчанию является 1/60 секундой.

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

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

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

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

Введен в R2006a