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

Можно запустить Polyspace® на коде, сгенерированном из модели Simulink® или подсистемы.

  • Polyspace Bug Finder™ проверяет код на ошибки или кодирующий нарушения правила (например, MISRA C®: 2 012 правил).

  • Polyspace Code Prover™ исчерпывающе проверяет код на ошибки времени выполнения.

Если вы используете Embedded Coder® в генерации кода, этот пример показывает, как запустить Polyspace на коде, сгенерированном из простой модели Simulink. Для полного рабочего процесса смотрите Анализ Polyspace Запуска Кода, Сгенерированного с Embedded Coder.

Предпосылки

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

Чтобы открыть модель, используемую в этом примере, ищите этот пример в Браузере документации MATLAB и нажмите кнопку Open Model.

Открытая модель для генерации кода и анализа Polyspace

Откройте модель polyspace_controller_demo для конфигурирования генерации кода и анализа Polyspace.

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

Чтобы сгенерировать код из модели, на вкладке Apps, выбирают Embedded Coder. На вкладке C Code выберите Generate Code.

Эквивалентный код MATLAB:

load_system('polyspace_controller_demo');
rtwbuild('polyspace_controller_demo');

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

Чтобы анализировать код, сгенерированный из модели, на вкладке Apps, выбирают Polyspace Code Verifier. На вкладке Polyspace:

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

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

Эквивалентный код MATLAB:

mlopts = pslinkoptions('polyspace_controller_demo'); 
mlopts.ResultDir ='\result'
mlopts.VerificationMode = 'CodeProver'; 
pslinkrun('polyspace_controller_demo', mlopts);
Чтобы анализировать со Средством поиска Ошибки, замените CodeProver с BugFinder. Для получения дополнительной информации о коде смотрите pslinkoptions и pslinkrun.

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

После анализа результаты отображены в пользовательском интерфейсе Polyspace.

Если при запуске Средство поиска Ошибки, результаты состоят из ошибок, обнаруженных в сгенерированном коде. Если при запуске Программу автоматического доказательства Кода, результаты состоят из проверок, на которые наносят цветную маркировку можно следующим образом:

  • Зеленый (доказанный код): проверка не перестала работать для обеспеченных ограничений данных. Например, операция деления не вызывает ошибку Division by Zero.

  • Красный (проверенная ошибка): проверка всегда перестала работать для набора обеспеченных ограничений данных. Например, операция деления всегда вызывает ошибку Division by Zero.

  • Оранжевый (возможная ошибка): проверка указывает на бездоказательный код и может перестать работать для определенных значений обеспеченных ограничений данных. Например, операция деления иногда вызывает ошибку Division by Zero.

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

Рассмотрите каждый результат анализа подробно. Например, в ваших результатах Программы автоматического доказательства Кода:

  1. На панели Results List выберите красную проверку Out of bounds array index.

  2. На панели Source установите свой курсор на красную проверку, чтобы просмотреть дополнительную информацию. Например, подсказка на красном [ оператор утверждает размер массивов и возможные значения индекса массива. Панель Result Details также предоставляет эту информацию.

Ошибка происходит в рукописном файле C Command_strategy_file.c. Файлом C является в Блоке s-function Command_Strategy в Reduced Precision подсистема (в модели - ссылке relative threshold).

Проследите ошибки смоделировать и зафиксировать их

Для кода, сгенерированного из модели, можно проследить ошибку до модели. Эти разделы показывают, как проследить определенные результаты Программы автоматического доказательства Кода до модели.

Ошибка 1: За пределы индекс массива

  1. На панели Results List выберите оранжевую ошибку Out of bounds array index, которая происходит в файле polyspace_controller_demo.c.

  2. На панели Source щелкните по ссылке S4:76 в комментариях выше оранжевой ошибки.

    /* Transition: '<S4>:75' */
    /* Transition: '<S4>:76' */
    (*i)++;
    
    /* Outport: '<Root>/FaultTable' */
    polyspace_controller_demo_Y.FaultTable[*i] = 10;

Вы видите, что ошибка происходит из-за перехода в диаграмме Stateflow synch_and_asynch_monitoring. Можно проследить ошибку до индекса входной переменной диаграммы Stateflow.

Можно избежать Out of bounds array index несколькими способами. Один путь состоит в том, чтобы ограничить входную переменную index использование блока Saturation перед диаграммой Stateflow.

Ошибка 2: переполнение

  1. На панели Results List выберите оранжевую ошибку Overflow, показанную ниже. Ошибка появляется в файле polyspace_controller_demo.c.

  2. На панели Source рассмотрите ошибку. Чтобы проследить ошибку до модели, щелкните по ссылке S1/Gain в комментариях выше оранжевой ошибки.

    /* Gain: '<S1>/Gain' incorporates:
    * Inport: '<Root>/Battery Info'
    * Inport: '<Root>/Rotation'
    * Sum: '<S1>/Sum1'
    */
    
    Gain = (int16_T)(((int16_T)((in_rotation + in_battery_info) >> 1) * 24576) >>
                       10);
    
    Вы видите, что ошибка происходит в Fault Management подсистема в блоке Gain после блока Sum.

Можно избежать Overflow несколькими способами. Один путь состоит в том, чтобы ограничить значение in_battery_info сигнала это питается блок Sum. Ограничить сигнал:

  1. Дважды кликните блок Inport Battery info это предоставляет входному сигналу in_battery_info к модели.

  2. На вкладке Signal Attributes измените значение Maximum сигнала.

Ошибки в этой модели происходят из-за одного из следующего:

  • Дефектное масштабирование, неизвестные калибровки и непротестированные области значений данных, выходящие из подсистемы в арифметический блок.

  • Манипуляция с массивами в Stateflow основанное на событии моделирование и рукописные функции интерполяционной таблицы.

  • Продвижение насыщения к неожиданному потоку данных в сгенерированном коде.

  • Дефектное программирование Stateflow.

Если вы идентифицируете первопричину ошибки, можно изменить модель соответственно, чтобы устранить проблему.

Проверяйте на кодирование нарушений правила

Проверять на кодирование нарушений правила, прежде, чем запустить анализ кода:

  1. На вкладке Polyspace выберите Settings.

  2. В диалоговом окне Configuration Parameters выберите подходящую опцию в списке Settings from. Например, выберите Project configuration and MISRA C 2012 AGC Checking.

    Рекомендуется, чтобы вы запустили Средство поиска Ошибки для проверки правил MISRA C:2012. На вкладке Polyspace выберите Bug Finder.

  3. Нажмите Apply или OK и повторно выполните анализ.

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

Можно выровнять по ширине результаты путем добавления аннотаций в блоки. Во время анализа кода Polyspace Code Prover читает ваши аннотации и заполняет результат с вашим выравниванием. Если вы выравниваете по ширине результат, вы не должны рассматривать его снова.

  1. На панели Results List, из выпадающего списка в левом верхнем углу, выбирают File.

  2. В файле polyspace_controller_demo.c, в функциональном polyspace_controller_demo_step(), выберите нарушение правила 10.4 MISRA C:2012. Панель Source показывает, что операция сложения нарушает правило.

  3. На панели Source щелкните по ссылке S1/Sum1 в комментариях выше операции сложения.

    /* Gain: '<S1>/Gain' incorporates:
    * Inport: '<Root>/Battery Info'
    * Inport: '<Root>/Rotation'
    * Sum: '<S1>/Sum1'
    */
    Gain = (int16_T)(((int16_T)((in_rotation + in_battery_info) >> 1) * 24576) >>
                       10);

    Вы видите, что нарушение правила происходит в блоке Sum.

    Аннотировать этот блок и выровнять по ширине нарушение правила:

    1. Выберите блок. На вкладке Polyspace выберите Add Annotation.

    2. Выберите MISRA-C-2012 для Annotation type и вводят информацию о нарушении правила. Установите Status на No action planned и Severity к Unset.

    3. Нажмите Apply или OK. Polyspace annotation слов появляется ниже блока, указывая, что блок содержит аннотацию кода.

    4. Регенерируйте код и повторно выполните анализ. Severity и столбцы Status на панели Results List предварительно заполняются с вашими аннотациями.

Похожие темы