Синхронизация задачи

Запустите код нисходящей подсистемы вызова функций или диаграммы 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()). Этот код позволяет порожденной запущенной задаче. Задача в свою очередь вызывает связанный код подсистемы вызова функций. Код синхронизации может запуститься на уровне прерывания. Связь между Асинхронными блоками Синхронизации Прерывания и Задачи выполняет эту операцию и инициировала выполнение блока 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.

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

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

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

Параметры

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

Первый аргумент передал системному вызову 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