Запуск кода подсистемы function-call в нисходящем направлении или диаграммы Stateflow путем создания примера задачи RTOS (VxWorks)
Simulink Coder/Асинхронные/Шаблоны прерываний
Блок синхронизации задач порождает примерную задачу RTOS (VxWorks), которая вызывает подсистему вызова функций или диаграмму Stateflow ®. Как правило, блок синхронизации задач размещается между блоком асинхронного прерывания и блоком подсистемы функционального вызова или диаграммой потока состояний. Кроме того, можно подключить блок синхронизации задач к порту вывода диаграммы Stateflow, имеющей событие ,Output to Simulink, сконфигурированный как вызов функции.
Блок синхронизации задач:
Использует вызов системы RTOS (VxWorks) taskSpawn чтобы создать независимую задачу. Когда задача активирована, она вызывает нисходящий код подсистемы вызова функции или диаграмму Stateflow. Блокирующие вызовы taskDelete для удаления задачи во время завершения модели.
Создает семафор для синхронизации подключенной подсистемы с выполнением блока.
Сворачивает порожденную задачу в бесконечное for цикл. В цикле порожденная задача прослушивает семафор с помощью semTake. Первый вызов semTake определяет NO_WAIT. Этот параметр позволяет задаче определить, требуется ли секунда semGive произошла до завершения работы подсистемы вызова функции или диаграммы. Эта последовательность указывает, что скорость прерывания слишком высока или приоритет задачи слишком низок.
Генерирует код синхронизации (например, semGive()). Этот код позволяет запустить созданную задачу. Задача, в свою очередь, вызывает код подключенной подсистемы вызова функций. Код синхронизации может выполняться на уровне прерывания. Соединение между блоками асинхронного прерывания и синхронизации задач выполняет эту операцию и запускает выполнение блока синхронизации задач в пределах ISR.
Обеспечивает абсолютное время, если этого требуют блоки в нисходящем алгоритмическом коде. Время поступает от таймера, поддерживаемого блоком асинхронного прерывания, или от независимого таймера, поддерживаемого задачей, связанной с блоком синхронизации задачи.
При проектировании приложения следует учитывать, когда могут быть приняты значения таймера и входного сигнала для подсистемы function-call в нисходящем направлении, подключенной к блоку Task Sync. По умолчанию время и входные данные считываются, когда RTOS (VxWorks) активирует задачу. В этом случае данные (ввод и время) синхронизируются с самой задачей. Если выбран параметр Synchronize the data transfer of this task with the caller task и драйвер блока Task Sync является блоком асинхронного прерывания, то время и входные данные считываются при возникновении прерывания (то есть в пределах ISR). В этом случае данные синхронизируются с абонентом блока синхронизации задач.
Примечание
Можно использовать блоки в vxlib1 (асинхронное прерывание и синхронизация задач) для моделирования и создания кода. Эти блоки содержат начальные примеры, помогающие разрабатывать пользовательские блоки для целевой среды.