Если вы генерируете код из 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.
Кроме того, запустите Генерация Кода Advisor с целевой Polyspace и проверьте, установлены ли необходимые параметры. Смотрите Конфигурирование модели для целей генерации кода при помощи Code Generation Advisor (Embedded Coder).
Чтобы сгенерировать код из модели, на вкладке C Code, выберите Generate Code. За прогрессом генерации кода можно следить в Diagnostic Viewer.
На вкладке Apps выберите Polyspace Code Verifier. На вкладке Polyspace:
Выберите продукт для запуска: Bug Finder или Code Prover.
Выберите Settings. При необходимости измените значения по умолчанию для этих опций.
Настройки от: Включить проверку MISRA® правила кодирования в дополнение к проверкам по умолчанию, заданным в строении проекта. Bug Finder по умолчанию проверяет поиск ошибок. Code Prover по умолчанию проверяет поиск ошибок времени выполнения.
Входы, настраиваемые параметры и выход: Ограничивайте входы, настраиваемые параметры или выходы для более точного анализа Code Prover.
Выходная папка: Укажите выделенную папку для результатов. Анализ по умолчанию сохраняет результаты в папке
в текущей рабочей папке.results_<reservedrangesplaceholder0 >
Полный список опций см. в разделе Polyspace Analysis in 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.
Результаты открываются автоматически, если явным образом не отключен. По умолчанию результаты сохраняются в папке
в текущей папке. Каждый новый запуск перезаписывает предыдущие результаты. Можно изменить папки по умолчанию или сохранить результаты в проекте Simulink. Чтобы внести эти изменения, на вкладке Polyspace выберите Settings.results_<reservedrangesplaceholder0 >
Если вы закрыли результаты и хотите открыть их позже, на вкладке Polyspace, выберите Analysis Results. Чтобы открыть результат перед последним запуском, выберите Open Earlier Results и перейдите к папке, содержащей предыдущие результаты.
Результаты отображаются в пользовательском интерфейсе Polyspace на панели Results List. Щелкните каждый результат, чтобы увидеть исходный код на панели Source и сведения на панели Result Details. См. также:
Ссылки в комментариях к коду показывают блоки, которые генерируют последующие строки кода. Чтобы увидеть блоки в модели, щелкните имена блоков в ссылках. Если вы столкнулись с проблемами, см. Раздел «Поиск и устранение проблем с навигацией из кода в модель».
Также можно щелкнуть правой кнопкой мыши имя переменной и выбрать Go to Model. Эта опция доступна не для всех переменных. Непосредственно проследить до блока Simulink можно только подмножество переменных исходного кода. Опции Go to Model доступны для такой переменной. Для получения дополнительной информации о том, какие переменные в сгенерированном коде можно проследить до блоков Simulink, смотрите Trace Simulink Model Elements in Generated Code (Embedded Coder).
Исследуйте, связаны ли проблемы в вашем коде с недостатками проекта в модели.
Недостатки проекта в модели могут привести к проблемам в сгенерированном коде. Для образца:
Сгенерированный код может быть свободен от определенных ошибок времени выполнения только для определенной области значений параметров блоков. Чтобы исправить эту проблему, можно изменить класс памяти этих параметров блоков или использовать калибровочные данные для анализа с помощью Настраиваемых параметров параметра конфигурации.
Сгенерированный код может быть свободен от определенных ошибок времени выполнения только для определенной области значений входов. Чтобы определить эту область значений без ошибок, можно задать минимальное и максимальное значение для сигналов Inport блока. Анализ Polyspace использует эту ограниченную область значений. Смотрите работу с диапазонами сигнала в блоках (Simulink).
Некоторые переходы в Stateflow® графики могут быть недоступны.
Если вы включите рукописный код C/C + + в блоки s-function, анализ Polyspace может выявить возможные проблемы интегрирования между рукописным и сгенерированным кодом. Можно также анализировать рукописный код в изоляции. Смотрите Run Polyspace Analysis on S-Function Code.
Если вы не хотите вносить изменения в модель в ответ на результат Polyspace, аннотируйте соответствующие блоки. После аннотации блока, операции кода, сгенерированные из блока, показывают результаты, которые предварительно заполняются вашими комментариями. Если вы аннотируете блок подсистемы или блок, который ведет к вызову функции, операции кода, сгенерированные из блока, не показывают ваши комментарии в результатах анализа. Если блок является Интерполяционной таблицей, включите Stub lookup tables
вместо использования аннотаций. См. Stub lookup tables
В коде, сгенерированном использованием Embedded Coder, известны отклонения от MISRA C®:2012. Смотрите Обоснование отклонений для MISRA C:2012 Compliance (Embedded Coder). Обосновать эти известные проблемы путем аннотирования блоков.
Аннотации в блоках Simulink или в сгенерированном коде не учитывают историю анализа. Если вы обновляете модель, результаты 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. Для получения дополнительной информации смотрите Trace Simulink Model Elements in Сгенерированный Код (Embedded Coder).
Чтобы аннотировать блок в редакторе Simulink, выберите блок и на вкладке Polyspace выберите Add Annotation. В Polyspace Annotation окне:
Выберите тип результата Polyspace, который необходимо аннотировать, из раскрывающегося меню Annotation Type
.
Если необходимо аннотировать несколько результатов одного и того же типа, введите в текстовое поле список результирующих сокращений, разделенных запятыми. См.:
Если требуется аннотировать только один результат, выберите Only 1 check. Текстовое поле преобразуется в раскрывающееся меню. Выберите результат, который необходимо аннотировать, из этого раскрывающегося меню.
В соответствующих текстовых полях введите статус, серьезность и комментарий, которые необходимо назначить результатам.
В Polyspace Annotation окне можно одновременно аннотировать один тип результата Polyspace. Аннотирование нескольких типов результатов. откройте Polyspace Annotation окно несколько раз. Каждый раз добавляйте аннотацию, соответствующую одному типу результата Polyspace. Различные аннотации добавляются друг к другу. Эти аннотации не могут быть видны в редакторе Simulink. При анализе сгенерированного кода с помощью Polyspace эти аннотации отображаются как информация о проверке на панели Result details пользовательского интерфейса Polyspace.
Иногда операции в сгенерированном коде вызывают оранжевые проверки в Code Prover. Предположим, что операция потенциально переполнена. Сгенерированный код защищает от переполнения путем следования операции с насыщением. Polyspace все еще помечает возможное переполнение как оранжевую проверку. Чтобы обосновать эти проверки через комментарии кода, задайте параметр конфигурации Аннотации оператора (Embedded Coder).
Когда вы копируете аннотированный блок и затем используете его в другой модели или в другом положении в той же модели, измененный контекст может сделать аннотацию неправильной.
Polyspace не допускает аннотации в блоках внутри библиотек и неатомных подсистем, потому что эти блоки повторно используются во многих различных контекстах. Например, вы не можете аннотировать блок внутри библиотечного блока и обосновать результаты для всех образцов библиотечного блока.
Simulink не сохраняет аннотации Polyspace в блоках, которые копируются в другую модель или в другую позицию в той же модели.