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