Task Sync

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

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

  • Task Sync block

Описание

Блок 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