Запустите анализ Polyspace кода, сгенерированного с Embedded Coder

Если вы генерируете код из модели Simulink® при помощи Embedded Coder® или TargetLink®, можно анализировать сгенерированный код для ошибок или ошибок времени выполнения с Polyspace® из окружения Simulink. Вы не должны вручную настраивать проект Polyspace.

Эта тема использует Embedded Coder для генерации кода. Для анализа TargetLink-сгенерированного-кода смотрите Анализ Polyspace Запуска Кода, Сгенерированного с TargetLink.

Для примера с определенной моделью смотрите Анализ Polyspace Запуска Кода, Сгенерированного из Модели Simulink.

Необходимые условия

Прежде чем вы запустите Polyspace от Simulink, необходимо соединить Polyspace и установки MATLAB®. Смотрите Интегрируют Polyspace с MATLAB и Simulink.

Сгенерируйте и анализируйте код

Сконфигурируйте генерацию кода и сгенерируйте код

Чтобы сконфигурировать генерацию кода и сгенерировать код из модели, выполнить одно из следующих действий:

  • На вкладке Apps выберите Embedded Coder. Затем на вкладке C Code выберите Quick Start. Следуйте экранным инструкциям.

  • На вкладке C Code нажмите Settings и сконфигурируйте генерацию кода через параметры конфигурации Simulink. Главные параметры, чтобы установить:

    • Тип (Simulink): выберите Fixed-step.

    • Решатель (Simulink): выберите auto (Automatic solver selection) или Discrete (no continuous states).

    • Системный конечный файл (Simulink Coder): Введите ert.tlc или autosar.tlc. Если вы выводите конечные файлы из ert.tlc, можно также задать их.

    • Код к модели (Embedded Coder): Выберите эту опцию, чтобы включить ссылки от кода до модели.

    Для полного списка параметров, чтобы установить, смотрите Рекомендуемые Параметры конфигурации Модели для Анализа Polyspace.

    В качестве альтернативы запустите Советника Генерации кода с объективным Polyspace и смотрите, устанавливаются ли обязательные параметры уже. Смотрите Конфигурируют Модель для Целей Генерации кода при помощи Советника Генерации кода (Embedded Coder).

    Чтобы сгенерировать код из модели, на вкладке C Code, выбирают Generate Code. Можно следовать за прогрессом генерации кода в Диагностическом Средстве просмотра.

Сконфигурируйте анализ кода

На вкладке Apps выберите Polyspace Code Verifier. На вкладке Polyspace:

  1. Выберите продукт, чтобы запуститься: Bug Finder или Code Prover.

  2. Выберите Settings. В случае необходимости измените значения по умолчанию этих опций.

    • Настройки от: Позвольте проверять правил кодирования MISRA® в дополнение к проверкам по умолчанию, заданным в настройке проекта. Проверки Bug Finder по умолчанию ищут ошибки. Проверки Программы автоматического доказательства Кода по умолчанию ищут ошибки времени выполнения.

    • Введите, Настраиваемые параметры и Выход: Ограничьте входные параметры, настраиваемые параметры или выходные параметры для более точного анализа Программы автоматического доказательства Кода.

    • 'OutputFolder' : Задайте специализированную папку для результатов. Анализ по умолчанию сохраняет результаты в папке results_modelName в текущей рабочей папке.

    • Открытые результаты автоматически после верификации

    Для полного списка опций, чтобы установить, смотрите Анализ Polyspace в Simulink.

Анализируйте код

Чтобы анализировать код, сгенерированный из модели, щелкните где угодно на холсте. Поле Analyze Code from показывает имя модели. Выберите Run Analysis.

При использовании Embedded Coder Polyspace проверяет на сгенерированный код, когда вы нажимаете Run Analysis. Если никакой сгенерированный код не присутствует, Polyspace сначала запускает процесс генерации кода и затем запускает анализ.

Если на текущую модель ссылаются в другой модели, и вы хотите проверить сгенерированный код в контексте, где на модель ссылаются вместо Code Generated as Top Model, используйте Code Generated as Model Reference. В последнем случае Polyspace не запускает генерацию кода автоматически, если нет никакого сгенерированного кода. При анализе Code Generated as Model Reference сгенерируйте код прежде, чем запустить анализ Polyspace.

Можно следовать за прогрессом анализа в командном окне MATLAB.

Результаты открываются автоматически, если явным образом не отключено. По умолчанию результаты сохраняются results_ModelName в папке в текущей папке. Каждый новый запуск перезаписывает предыдущие результаты. Можно изменить папки по умолчанию или сохранить результаты в проект Simulink. Чтобы внести эти изменения, на вкладке Polyspace, выбирают Settings.

Если вы закрыли результаты и хотите открыть их позже на вкладке Polyspace, выберите Analysis Results. Чтобы открыть результат до последнего запуска, выберите Open Earlier Results и перейдите к папке, содержащей предыдущие результаты.

Рассмотрите результаты анализа

Рассмотрите результаты в коде

Результаты появляются в пользовательском интерфейсе Polyspace на панели Results List. Кликните по каждому результату видеть исходный код на панели Source и детали о панели Result Details. Смотрите также:

Перейдите от кода до модели

Ссылки в комментариях к коду показывают блоки, которые генерируют последующие строки кода. Чтобы видеть блоки в модели, кликните по именам блока в ссылках. Если вы сталкиваетесь с проблемами, смотрите Навигацию Поиска и устранения неисправностей от Кода до Модели.

В качестве альтернативы можно щелкнуть правой кнопкой по имени переменной и выбрать Go to Model. Эта опция не доступна для всех переменных. Только подмножество переменных исходного кода может быть непосредственно прослежено до блока Simulink. Опции Go to Model доступны для такой переменной. Для получения дополнительной информации о котором переменные в сгенерированном коде могут быть прослежены до блоков Simulink, видеть Трассировку Элементы модели Simulink в Сгенерированном коде (Embedded Coder).

Устраните проблему

Займитесь расследованиями, связаны ли проблемы в вашем коде с недостатками дизайна в модели.

Недостатки дизайна в модели могут привести к проблемам в сгенерированном коде. Например:

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

  • Сгенерированный код может быть свободен от определенных ошибок времени выполнения только для определенной области значений входных параметров. Чтобы определить эту безошибочную область значений, можно задать минимальное и максимальное значение для блоков-сигналов Inport. Анализ Polyspace использует эту ограниченную область значений. Смотрите работу с Диапазонами сигнала в Блоках (Simulink).

  • Определенные переходы в графиках Stateflow® могут быть недостижимыми.

Если вы включаете рукописный код C/C++ в Блоки s-function, анализ Polyspace может показать возможные проблемы интегрирования между рукописным и сгенерированным кодом. Можно также анализировать рукописный код в изоляции. Смотрите Анализ Polyspace Запуска Кода S-функции.

Аннотируйте блоки, чтобы выровнять по ширине проблемы

Если вы не хотите вносить изменения в модель в ответ на результат Polyspace, аннотируйте соответствующие блоки. После того, как вы аннотируете блок, операции кода, сгенерированные от результатов блока show, которые предварительно заполняются с вашими комментариями. Если вы аннотируете блок подсистемы или блок, который приводит к вызову функции, операции кода, сгенерированные от блока, не показывают ваши комментарии в результатах анализа. Если блоком является Интерполяционная таблица, включите Stub lookup tables вместо того, чтобы использовать аннотации. Смотрите Stub lookup tables

В коде, сгенерированном при помощи Embedded Coder, существуют известные отклонения от MISRA C®:2012. Смотрите Объяснение Отклонений для Податливости MISRA C:2012 (Embedded Coder). Выровняйте по ширине эти известные проблемы путем аннотирования блоков.

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

Аннотируйте блоки через пользовательский интерфейс Polyspace

Если вы используете Embedded Coder, чтобы сгенерировать код, можно аннотировать блоки Simulink непосредственно через Пользовательский интерфейс Polyspace. Найдите проблему, которую вы хотите аннотировать, и затем ввести информацию об анализе путем добавления Severity, Status и дополнительных примечаний в панели Result Details. Например, в Пользовательском интерфейсе Polyspace:

  • Установите Status проблемы к To Investigate

  • Установите Comment для проблемы к Might Impact "Module"

В исходном коде щелкните правой кнопкой по переменной, показывающей проблему и из контекстного меню, выберите Annotate Block.

Информация об анализе переносит на Редактор Simulink как аннотация блока, где аннотируемый блок подсвечен.

Можно аннотировать блок Simulink многократно. Последующие аннотации на блок добавлены к предыдущим аннотациям. Эти аннотации не могут быть замечены в Редакторе Simulink. Когда вы анализируете сгенерированный код при помощи Polyspace, эти аннотации отображены как информация об анализе в панели Result details Пользовательского интерфейса Polyspace.

Polyspace использует обеспеченную пользователями информацию, чтобы предварительно заполнить аннотации в Simulink. Комментарии, которые установлены в Пользовательском интерфейсе Polyspace, появляются в двойных кавычках в поле Comment в Simulink. Если у вас есть двойные кавычки в комментарии в Пользовательском интерфейсе Polyspace, те заменяются одинарными кавычками в Simulink.

Annotate Block опции доступен для элементов кода, которые могут быть прослежены до блока Simulink. Для получения дополнительной информации смотрите Трассировку Элементы модели Simulink в Сгенерированном коде (Embedded Coder).

Аннотируйте блоки в редакторе Simulink

Чтобы аннотировать блок в Редакторе Simulink, выберите блок и на вкладке Polyspace, выберите Add Annotation. В окне Polyspace Annotation:

  • Выберите тип результата Polyspace, который вы хотите аннотировать в выпадающем меню Annotation Type.

  • Если вы хотите аннотировать несколько результатов того же типа, введите список разделенных запятой значений акронима результата в текстовом поле. См.:

  • Если вы хотите аннотировать только один результат, выберите Only 1 check. Текстовое поле преобразовано в выпадающее меню. Выберите результат, который вы хотите аннотировать из этого выпадающего меню.

  • В соответствующих текстовых полях введите состояние, серьезность, и прокомментируйте, что вы хотите присвоить результатам.

В окне Polyspace Annotation можно аннотировать один тип результата Polyspace за один раз. Аннотировать несколько типов результатов. откройте окно Polyspace Annotation многократно. Каждый раз добавьте аннотацию, соответствующую одному типу результата Polyspace. Различные аннотации добавлены друг другу. Эти аннотации не могут быть замечены в Редакторе Simulink. Когда вы анализируете сгенерированный код при помощи Polyspace, эти аннотации отображены как информация об анализе в панели Result details Пользовательского интерфейса Polyspace.

Иногда операции в сгенерированном коде вызывают оранжевые регистрации Программы автоматического доказательства Кода. Предположим, что операция потенциально переполняется. Сгенерированный код защищает от переполнения следующим операцию с насыщением. Polyspace все еще отмечает возможное переполнение как оранжевую проверку. Чтобы выровнять по ширине они посылают багажом комментарии к коду, задайте аннотации Оператора параметра конфигурации (Embedded Coder).

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

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

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

Похожие темы