exponenta event banner

Запуск Polyspace на коде C/C + +, сгенерированном из кода MATLAB

После генерации кода C/C + + из кода MATLAB ® можно независимо проверить созданный код для:

  • Ошибки или дефекты и нарушения правил кодирования: Используйте Finder™ Polyspace ® Bug.

  • Ошибки времени выполнения: Используйте Prover™ кода Polyspace.

Создается ли код в приложении MATLAB Coder™ или используется codegenдля проверки созданного кода можно использовать тот же поток операций.

В данном учебном пособии используется пример кодера MATLAB averaging_filter в polyspaceroot\help\toolbox\codeprover\examples\matlab_coder. Здесь, polyspacroot является папкой установки Polyspace, например, C:\Program Files\Polyspace\R2021a. В примере показан анализ проверки кода. Вы можете следовать аналогичному процессу поиска ошибок.

Предпосылки

Для запуска этого учебного пособия:

  • Необходимо иметь лицензию Embedded Coder ®. Приложение MATLAB Coder не отображает параметры запуска Polyspace, если у вас нет лицензии Embedded Coder.

  • Вы должны знать, как открыть и использовать приложение MATLAB Coder или codegen команда. В противном случае см. раздел Начало работы с кодером MATLAB.

  • Необходимо связать установки Polyspace и MATLAB. См. раздел Интеграция полиспейса с MATLAB и Simulink.

Выполнить анализ в пространстве

В приложении MATLAB Coder создайте код из файла averaging_filter.m и проанализируйте созданный код.

  1. Создать код.

    Из функции начальной точки в файле создайте автономный код C/C + + (статическая библиотека, динамически связанная библиотека или исполняемая программа) в приложении Кодер MATLAB. Функция имеет один вход. Явно укажите тип данных для ввода, например вектор 1 X 100 типаdoubleили предоставить файл для получения типов данных.

  2. Проанализируйте созданный код.

    После создания кода откройте панель «Полиспейс» и нажмите кнопку «Выполнить».

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

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

% Generate code
matlabFileName = fullfile(polyspaceroot, 'help',...
    'toolbox','codeprover','examples','matlab_coder','averaging_filter.m');
codegenFolder = fullfile(pwd, 'codegenFolder');
codegen(matlabFileName, '-config:lib', '-c', '-args', ...
   {zeros(1,100,'double')}, '-d', codegenFolder);

% Configure Polyspace analysis
opts = pslinkoptions('ec');
opts.ResultDir = [tempdir 'results'];
opts.OpenProjectManager = 1;

% Run Polyspace
[polyspaceFolder, resultsFolder] = pslinkrun('-codegenfolder', codegenFolder, opts);

Обзор результатов анализа

После анализа на панели Список результатов (Results List) отображается список проверок времени выполнения. Дополнительные сведения о цветах результатов см. в разделах Результаты проверки кода и Цвета исходного кода (Проверка кода в пространстве).

Просмотрите результаты и определите, следует ли устранить неполадки.

  1. Фильтрация результатов, которые не требуется просматривать. Например, вы можете не видеть зеленые чеки.

    См. обзор результатов на панели Панель мониторинга. Щелкните оранжевый раздел круговой диаграммы, чтобы отфильтровать список результатов на панели Список результатов (Results List) по одной оранжевой проверке. Щелкните эту оранжевую проверку переполнения и просмотрите исходный код для операции, которая может быть переполнена.

    Если результаты сгруппированы по семейству, для просмотра плоского списка на панели «Список результатов» в раскрывающемся списке выберите «Нет».

  2. Найдите основную причину каждой ошибки времени выполнения.

    На панели «Источник» щелкните правой кнопкой мыши инструменты навигации и всплывающие подсказки для определения основной причины проверки. В этом случае вы видите, что + переполнение операции, поскольку Polyspace делает предположение о входном массиве для функции. Предполагается, что элементы массива могут иметь любое значение, разрешенное их double тип данных. Подсказка на строке buffer[0] = x[i] показывает предполагаемый диапазон.

    С помощью лицензии Embedded Coder можно легко выполнить обратную трассировку от сгенерированного кода C к исходному коду MATLAB. См. раздел Интерактивная трассировка между кодом MATLAB и сгенерированным кодом C/C + + (встроенный кодер).

Выполнить анализ для определенного диапазона проектирования

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

Чтобы задать диапазон для входных данных:

  1. Откройте конфигурацию анализа.

    В интерфейсе пользователя Polyspace перейдите к проекту Polyspace, созданному для анализа. Выберите меню «Окно» > «Сброс компоновки» > «Настройка проекта». На панели «Диспетчер проектов» выберите конфигурацию проекта.

  2. Укажите проектный диапазон для входных данных.

    На панели Конфигурация (Configuration) в узле Входы и заглушки (Inputs & Stubbing) настройте ограничения. Щелкните Править (Edit) рядом с пунктом Настройка зависимости (Constraint setup). Ограничьте диапазон первого ввода значением [-100.. 100].

    Шаблон ограничений по умолчанию можно перезаписать или сохранить в другом месте. Сведения о столбцах в этом окне см. в разделе Внешние ограничения для анализа в пространстве.

  3. Повторно запустите анализ из приложения Coder (или в командной строке MATLAB) и просмотрите результаты.

    На панели Панель мониторинга больше не отображается предыдущее оранжевое переполнение.

См. также

Связанные темы