После генерации кода C/C + + из MATLAB® код, можно самостоятельно проверить сгенерированный код на:
Ошибки или дефекты и нарушения правил кодирования: Используйте Polyspace® Bug Finder™.
Ошибки времени выполнения: Используйте Polyspace Code Prover™.
Сгенерируете ли вы код в приложении MATLAB Coder™ или используете codegen
можно следовать тому же рабочему процессу для проверки сгенерированного кода.
В этом руководстве используется MATLAB Coder averaging_filter
в
. Здесь, polyspaceroot
\ help\toolbox\codeprover\examples\matlab _ coder
является папкой установки Polyspace, например polyspacroot
C:\Program Files\Polyspace\R2021a
. Пример показывает анализ Code Prover. Вы можете следовать аналогичному рабочему процессу для Bug Finder.
Чтобы запустить это руководство:
У вас должен быть Embedded Coder® лицензия. Приложение MATLAB Coder не показывает опции запуска Polyspace, если у вас нет лицензии Embedded Coder.
Вы должны ознакомиться с тем, как открыть и использовать приложение MATLAB Coder или codegen
команда. В противном случае см. раздел «Начало работы с MATLAB CODER».
Необходимо связать установки Polyspace и MATLAB. См. «Интеграция Polyspace с MATLAB и Simulink».
В приложении MATLAB Coder сгенерируйте код из файла averaging_filter.m
и анализ сгенерированного кода.
Сгенерируйте код.
Из функции точки входа в файле сгенерируйте автономный код C/C + + (статическая библиотека, динамически связанная библиотека или исполняемая программа) в приложении MATLAB Coder. Функция имеет один вход. Явным образом задайте тип данных для входа, например, вектор типа 1 X 100 double
, или предоставить файл для вывода типов данных.
Проанализируйте сгенерированный код.
После генерации кода откройте панель Polyspace и нажмите Run.
Если анализ завершен без ошибок, результаты Polyspace открываются автоматически. Если вы закрываете результаты, можно повторно открыть их с последней страницы в приложении, под разделом Generated Output. Результаты хранятся в подпапке 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 отображается список проверок во время выполнения. Для объяснения цветов результатов смотрите Результаты Code Prover и Цвета исходного кода (Polyspace Code Prover).
Проверьте результаты и определите, нужно ли устранять проблемы.
Отфильтруйте результаты, которые вы не хотите просматривать. Например, можно не видеть зеленые чеки.
См. обзор результатов на панели Dashboard. Щелкните оранжевый раздел круговой диаграммы, чтобы отфильтровать список результатов на Results List панели к одной оранжевой проверке. Щелкните этот оранжевый Overflow проверки и увидеть исходный код для операции, которая может переполниться.
Если результаты сгруппированы по семейству, чтобы увидеть плоский список, на панели Results List, в выпадающем списке, выберите None.
Найдите первопричину каждой ошибки времени выполнения.
На панели Source используйте инструменты навигации и всплывающие подсказки для определения первопричины проверки. В этом случае вы видите, что +
операция переполнена, потому что Polyspace делает предположение о входе массиве в функцию. Предположение, что элементы массива могут иметь любое значение, разрешенное их double
тип данных. Всплывающая подсказка на линии buffer[0] = x[i]
показывает принятую область значений.
С помощью лицензии Embedded Coder можно легко отследить от сгенерированного кода C до оригинального кода MATLAB. Смотрите Интерактивное Отслеживание между Кодом MATLAB и Сгенерированным Кодом C/C + + (Embedded Coder).
Можно проверить сгенерированный код на определенную область значений входов. Спецификация области значений помогает сузить предположение по умолчанию, что входы являются полными.
Чтобы задать область значений для входов:
Откройте строение анализа.
В пользовательском интерфейсе Polyspace переключитесь на проект Polyspace, созданный для анализа. Выберите Window > Reset Layout > Project Setup. На панели Project Browser щелкните строение проекта.
Задайте область значений проекта для входов.
На панели Configuration, на узле Inputs & Stubbing, настройте ограничения. Щелкните Edit рядом с Constraint setup. Ограничьте область значений первого входа значением [-100.. 100].
Можно перезаписать шаблон ограничения по умолчанию или сохранить ограничения в другом месте. Для получения информации о столбцах в этом окне смотрите Внешние ограничения для анализа Polyspace.
Перезапустите анализ из приложения Coder (или в командной строке MATLAB) и посмотрите результаты.
На Dashboard панели вы больше не видите предыдущего оранжевого переполнения.