exponenta event banner

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

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

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

  • Task Sync block

Описание

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

Порты

Вход

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

Вызов из блока асинхронного прерывания.

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

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

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

Параметры

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

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

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

Примечание

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

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

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

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

  • Появится опция Разрешение по таймеру (Timer resolution).

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

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

  • Блок не поддерживает независимый таймер и не отображает поле Разрешение таймера.

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

Разрешение таймера блока в секундах. Эта опция появляется только в том случае, если параметр Синхронизировать передачу данных этой задачи с задачей вызывающего абонента не выбран. По умолчанию блок получает значение таймера путем вызова tickGet в RTOS (VxWorks). Разрешение по умолчанию - 1/60 секунды.

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

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

Дополнительные сведения см. в разделе Управление распределением памяти для счетчиков времени. См. также Таймеры в асинхронных задачах.

Представлен в R2006a