Cyclic tasks (-cyclic-tasks)

Задайте функции, которые представляют циклические задачи

Описание

Эта опция не доступна для кода, сгенерированного из кода MATLAB® или моделей Simulink®.

Задайте функции, которые представляют циклические задачи. Анализ принимает что операции в теле функции:

  • Может выполнить любое число раз.

  • Может быть прерван нециклическими задачами, другими циклическими задачами и прерываниями. Нециклические задачи заданы с опцией Tasks (-entry-points) и прерывания заданы с опцией Interrupts (-interrupts).

    Чтобы смоделировать циклическую задачу, которая не может быть прервана другими циклическими задачами, задайте задачу как nonpreemptable. Смотрите -non-preemptable-tasks. Для примеров смотрите, Задают Прерывания Preemptable и Задачи Nonpreemptable.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция доступна на узле Multitasking. Смотрите Зависимости для других опций, которые необходимо также включить.

Командная строка: Используйте опцию -cyclic-tasks. Смотрите информацию о командной строке.

Почему использование эта опция

Используйте эту опцию, чтобы задать циклические задачи в вашем многозадачном коде. Функции, которые вы задаете, должны иметь прототип:

void function_name(void);

Верификация Программы автоматического доказательства Кода использует ваши технические требования, чтобы определить:

  • Совместно используется ли глобальная переменная.

    Смотрите глобальные переменные (Polyspace Code Prover).

  • Может ли ошибка времени выполнения произойти.

    Например, если операция var++ происходит в теле циклической задачи, и вы не накладываете ограничение на var, операция может переполниться. Анализ обнаруживает возможное переполнение.

Анализ Средства поиска Ошибки использует ваши технические требования, чтобы искать дефекты параллелизма. Для Data race дефект, программное обеспечение устанавливает следующие отношения между выгружаемыми задачами и другими задачами.

  • Данные мчатся между двумя выгружаемыми задачами:

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

    Если обе операции являются атомарными, чтобы видеть дефект, необходимо включить средству проверки Data race including atomic operations.

  • Данные мчатся между выгружаемой задачей и nonpreemptable задачей или прерыванием:

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

    • Неатомарная операция в выгружаемой задаче также не может вмешаться в операцию в nonpreemptable задаче или прерывании. Однако последняя операция может прервать первого. Поэтому, если операции используют ту же совместно используемую переменную без защиты, гонка данных может произойти.

Для получения дополнительной информации смотрите Дефекты Параллелизма.

Настройки

Никакое значение по умолчанию

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

  • Щелкните, чтобы добавить поле и ввести имя функции.

  • Щелкните, чтобы перечислить функции в вашем коде. Выберите функции из списка.

Зависимости

Чтобы включить эту опцию в пользовательском интерфейсе десктопных решений, сначала выберите опцию Configure multitasking manually.

Советы

  • В Программе автоматического доказательства Кода функции, представляющие циклические задачи, должны иметь форму

    void functionName (void)

  • Если функциональный func берет аргументы или возвращает значение, вы не можете использовать его непосредственно в качестве циклической задачи. Использовать func как циклическая задача: вызовите func от обертки void- void функционируйте и задайте обертку как циклическую задачу. Смотрите Configure multitasking manually.

  • Если вы задаете функцию как циклическую задачу, необходимо предоставить ее определение. В противном случае верификация Программы автоматического доказательства Кода останавливается с сообщением об ошибке:

    task func_name must be a userdef function without parameters

    Анализ Средства поиска Ошибки продолжает, но не рассматривает функции как циклическую задачу.

  • Если вы петляете верификацией файла в Программе автоматического доказательства Кода, ваши многозадачные опции проигнорированы. Смотрите Verify files independently (-unit-by-unit).

  • Анализ многозадачности Polyspace® принимает, что задача не может прервать себя.

Информация о командной строке

Параметр: -cyclic-tasks
Никакое значение по умолчанию
Значение: function1[, function2[,...]]
Пример (Средство поиска Ошибки): Polyspace Bug Finder - источники file_name - циклические задачи func_1, func_2
Пример (Программа автоматического доказательства Кода): Polyspace Code Prover - источники file_name - циклические задачи func_1, func_2
Пример (Сервер Средства поиска Ошибки): сервер средства поиска ошибки полипробела - источники file_name - циклические задачи func_1, func_2
Пример (Сервер Программы автоматического доказательства Кода): сервер программы автоматического доказательства полипробела кода - источники file_name - циклические задачи func_1, func_2
Введенный в R2017b