Если вы генерируете код из модели 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:
Выберите продукт, чтобы запуститься: Bug Finder или Code Prover.
Выберите Settings. В случае необходимости измените значения по умолчанию этих опций.
Настройки от: Позвольте проверять правил кодирования MISRA® в дополнение к проверкам по умолчанию, заданным в настройке проекта. Проверки Средства поиска Ошибки по умолчанию ищут ошибки. Проверки Программы автоматического доказательства Кода по умолчанию ищут ошибки времени выполнения.
Введите, Настраиваемые параметры и Выход: Ограничьте входные параметры, настраиваемые параметры или выходные параметры для более точного анализа Программы автоматического доказательства Кода.
'OutputFolder' : Задайте специализированную папку для результатов. Анализ по умолчанию сохраняет результаты в папке results_
в текущей рабочей папке.modelName
Для полного списка опций, чтобы установить, смотрите Анализ Polyspace в Simulink.
Чтобы анализировать код, сгенерированный из модели, щелкните где угодно на холсте. Поле Analyze Code from показывает имя модели. Выберите Run Analysis.
Если на текущую модель ссылаются в другой модели, и вы хотите проверить сгенерированный код в контексте, где на модель ссылаются вместо Code Generated as Top Model, используйте Code Generated as Model Reference.
Можно следовать за прогрессом анализа в командном окне MATLAB.
Результаты открываются автоматически, если явным образом не отключено. По умолчанию результаты сохраняются
в текущей папке. Каждый новый запуск перезаписывает предыдущие результаты. Можно изменить папки по умолчанию или сохранить результаты в проект Simulink. Чтобы внести эти изменения, на вкладке Polyspace, выбирают Settings.results_ModelName в папке
Если вы закрыли результаты и хотите открыть их позже на вкладке 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 могут измениться, в то время как аннотации не делают. Обновление силы модели представляет существующие устаревшие аннотации. Проверяйте свои аннотации, когда вы обновите свой типовой кодекс или сгенерированный код.
Если вы используете Embedded Coder, чтобы сгенерировать код, можно аннотировать блоки Simulink непосредственно через Пользовательский интерфейс Polyspace. Найдите проблему, которую вы хотите аннотировать, и затем ввести информацию об анализе путем добавления Severity, Status и дополнительных примечаний в панели Result Details. Например, в Пользовательском интерфейсе Polyspace:
Установите Status проблемы к To Investigate
Установите Comment для проблемы к Might Impact "Module"
В исходном коде щелкните правой кнопкой по переменной, показывающей проблему и из контекстного меню, выберите Annotate Block.
Информация об анализе переносит на Редактор Simulink как аннотация блока, где аннотируемый блок подсвечен.
Чтобы видеть эту аннотацию в Редакторе Simulink, выберите подсвеченный компонент и нажмите Edit Annotation. Диалоговое окно аннотации Polyspace кажется предзаполненным с информацией об анализе.
Polyspace использует обеспеченную пользователями информацию, чтобы предварительно заполнить аннотации в Simulink. Комментарии, которые установлены в Пользовательском интерфейсе Polyspace, появляются в двойных кавычках в поле Comment в Simulink. Если у вас есть двойные кавычки в комментарии в Пользовательском интерфейсе Polyspace, те заменяются одинарными кавычками в Simulink.
Annotate Block опции доступен для элементов кода, которые могут быть прослежены до блока Simulink. Для получения дополнительной информации смотрите Трассировку Элементы модели Simulink в Сгенерированном коде (Embedded Coder).
Чтобы аннотировать блок в Редакторе Simulink, выберите блок и на вкладке Polyspace, выберите Add Annotation. Войдите:
Список, разделенный запятыми акронимов результата. Чтобы выровнять по ширине только тип результата, выберите Only 1 check.
См.:
Состояние, серьезность и комментарий, чтобы присвоить результатам.
Иногда операции в сгенерированном коде вызывают оранжевые регистрации Программы автоматического доказательства Кода. Предположим, что операция потенциально переполняется. Сгенерированный код защищает от переполнения следующим операцию с насыщением. Polyspace все еще отмечает возможное переполнение как оранжевую проверку. Чтобы выровнять по ширине они посылают багажом комментарии к коду, задайте аннотации Оператора параметра конфигурации (Embedded Coder).
Когда вы копируете аннотируемый блок и затем используете его в различной модели или в различном положении в той же модели, измененный контекст может представить неправильную аннотацию.
Polyspace не позволяет аннотацию в блоках в библиотеках и неатомарных подсистемах, потому что эти блоки снова используются во многих различных контекстах. Например, вы не можете аннотировать блок в библиотечном блоке и выровнять по ширине результаты на всех экземплярах библиотечного блока.
Simulink не сохраняет аннотации Polyspace в блоках, которые копируются в различную модель или в различном положении в той же модели.