﻿# Использование статического анализатора PVS\-Studio при разработке для встраиваемых систем на C и C\+\+

Из этой статьи вы узнаете, как запустить проверку embedded\-проекта и как работать с отчетом анализатора\.

![0655_PVS-Studio-for-Embedded_ru/image1.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image1.png)

Анализатор PVS\-Studio поддерживает ряд компиляторов для встраиваемых систем\. В текущей версии возможна проверка проектов при сборке одним из следующих компиляторов под Window, Linux и macOS:

* [IAR Embedded Workbench](https://www.iar.com/)
* [Keil Embedded Development Tools for Arm](https://www.keil.com/)
* [TI ARM Code Generation Tools](http://www.ti.com/)
* [GNU Embedded Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm)

## Установка

Процедура установки зависит от операционной системы, под которой вы ведете разработку\. Под Linux вы можете установить анализатор из репозитория или из установочного пакета\.

Пример для систем на основе Debian:

```cpp
wget -q -O - https://files.pvs-studio.com/etc/pubkey.txt | sudo apt-key add -

sudo wget -O /etc/apt/sources.list.d/viva64.list \
https://files.pvs-studio.com/etc/viva64.list

sudo apt update
sudo apt install pvs-studio
```

или

```cpp
sudo gdebi pvs-studio-VERSION.deb
```

Под macOS установку и обновление можно произвести из [Homebrew](https://brew.sh/):

```cpp
brew install viva64/pvs-studio/pvs-studio
brew upgrade pvs-studio
```

Второй вариант – установить из _dmg_ пакета или вручную распаковать из архива\.

Под Windows установка производится с помощью инсталлятора:

![0655_PVS-Studio-for-Embedded_ru/image2.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image2.png)

Скачать установочные пакеты для всех поддерживаемых систем и при необходимости запросить триальный ключ вы можете на странице "[Скачать и попробовать PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/download/)"\.

После установки следует ввести лицензионный ключ\. Вы можете найти информацию о том, как это сделать на разных платформах, на странице документации "[Как ввести лицензию PVS\-Studio, и что делать дальше](https://pvs-studio.ru/ru/docs/manual/0046/)"\.

## Проверка проектов

Проверку проектов для embedded систем можно производить теми же способами, что и в случае с разработкой под Windows, Linux и macOS\.

Варианты запуска под Linux рассмотрены в статье "[Знакомство со статическим анализатором PVS\-Studio при разработке C\+\+ программ в среде Linux](https://pvs-studio.ru/ru/blog/posts/cpp/0652/)"\. Имейте в виду, что так как для сборки под embedded используется кросс\-компиляция, и имя компилятора может быть нестандартным, вам может понадобиться указать его при анализе проекта\. Для этого используется параметр командной строки _–compiler_ или _–c_:

pvs\-studio\-analyzer analyze \-c MyCompiler

Применять этот параметр следует в том случае, когда анализатор не может определить тип используемого компилятора, то есть когда выдается ошибка "No compilation units found"\.

При кросс\-компиляции, так как целевая платформа отличается от той, под которой происходит сборка, вместе с компилятором вам может потребоваться указать целевую платформу с помощью параметра _\-\-platform_, а также тип препроцессора \(_\-\-preprocessor_\)\.

Поддерживаемые платформы: _win32, x64, linux32, linux64, macos, arm\._

Поддерживаемые препроцессоры: _gcc, clang, keil\._

По умолчанию под Linux выбирается платформа _linux64_ и препроцессор _gcc_\.

Если вы используете Windows, проверить проект можно в режиме мониторинга компиляции\. Для этого нужно запустить утилиту "_C and C\+\+ Compiler Monitoring UI_", которая устанавливается вместе с анализатором\. Чтобы запустить мониторинг, зайдите в меню _Tools_ и нажмите _Analyze Your Files\.\.\._ Откроется диалог:

![0655_PVS-Studio-for-Embedded_ru/image3.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image3.png)

Нажмите на кнопку "_Start Monitoring_" и запустите сборку\. После ее завершения нажмите на кнопку "_Stop Monitoring_" в диалоговом окне в правом нижнем углу экрана:

![0655_PVS-Studio-for-Embedded_ru/image4.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image4.png)

Результат проверки можно посмотреть в основном окне утилиты "_C and C\+\+ Compiler Monitoring UI_"\.

Также анализ можно запустить из командной строки\. Для этого используется утилита CLMonitor\. Запустить мониторинг можно командой:

```cpp
CLMonitor.exe monitor
```

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

```cpp
CLMonitor.exe analyze -l "<path>\out.plog"
```

Анализатор проверит проект и сохранит результаты в файл, указанный в параметре _\-l_\.

Смотрите также раздел документации "[Система мониторинга компиляции в PVS\-Studio](https://pvs-studio.ru/ru/docs/manual/0031/)"\.

## Работа с отчетами

Чтобы посмотреть отчет под Linux, нужно сконвертировать полученный в результате работы анализатора файл в один из поддерживаемых форматов с помощью утилиты _plog\-converter_\. Получить отчет в формате HTML с возможностью просмотра исходного кода можно следующей командой:

```cpp
plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir
```

Более подробно конвертация отчетов описана в статье "[Знакомство со статическим анализатором PVS\-Studio при разработке C\+\+ программ в среде Linux](https://pvs-studio.ru/ru/blog/posts/cpp/0652/)"\.

Под Windows также существует утилита _PlogConverter_, которая позволяет конвертировать файлы отчетов аналогичным образом:

```cpp
PlogConverter.exe <path>\out.plog --renderTypes= FullHtml --analyzer=GA:1,2
```

или

```cpp
PlogConverter.exe D:\Projct\out.plog -t FullHtml -a GA:1,2
```

Также отчет в формате _plog_ можно посмотреть с помощью утилиты "_C and C\+\+ Compiler Monitoring UI_" через меню _File\-\>Open PVS\-Studio Log\.\.\._ 

Пример:

![0655_PVS-Studio-for-Embedded_ru/image5.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image5.png)

В случае необходимости из этой утилиты можно экспортировать отчет в один из поддерживаемых форматов через меню _File_\.

## Стандарт MISRA

PVS\-Studio классифицирует предупреждения согласно [CWE](https://pvs-studio.ru/ru/pvs-studio/sast/cwe/) и [SEI CERT](https://pvs-studio.ru/ru/pvs-studio/sast/cert/), что подходит для статического тестирования защищенности \([SAST](https://pvs-studio.ru/ru/pvs-studio/sast/)\) обычных приложений\. Однако у встраиваемых систем несколько другие требования к безопасности, которые покрывает специально разработанный стандарт [MISRA](https://www.misra.org.uk/)\. Текущая версия анализатора поддерживает часть правил из MISRA C и MISRA C\+\+, список диагностик можно посмотреть [здесь](https://pvs-studio.ru/ru/docs/warnings/), и он постоянно расширяется\.

Использования правил MISRA при проверке проектов, не предназначенных для embedded, чаще всего неоправданно\. Это связано со спецификой стандарта\. В большинстве случаев, если код изначально не писался с расчетом на соответствие MISRA, при проверке будет много ложных и бесполезных предупреждений\. Поэтому правила MISRA по умолчанию отключены\.

Чтобы включить анализ MISRA под Linux, нужно запустить анализ с ключом _\-a_ и передать числовой параметр, который задаст необходимый режим\. Этот параметр представляет собой комбинацию битовых полей:

```cpp
-a [MODE], --analysis-mode [MODE]
        MODE defines the type of warnings:
        1 - 64-bit errors;
        2 - reserved;
        4 - General Analysis;
        8 - Micro-optimizations;
        16 - Customers Specific Requests;
        32 - MISRA.
        Modes can be combined by adding the values
        Default: 4
```

Пример запуска \(включены диагностики GA и MISRA\):

```cpp
pvs-studio-analyzer analyze -a 36 -o /path/report.log
```

При использовании _plog\-converter_ также нужно указать, что диагностики MISRA должны попасть в отчет:

```cpp
plog-converter -a MISRA:1,2,3 -m misra ....
```

Под Windows можно использовать диалог настроек утилиты "_C and C\+\+ Compiler Monitoring UI_":

![0655_PVS-Studio-for-Embedded_ru/image6.png](https://import.viva64.com/docx/blog/0655_PVS-Studio-for-Embedded_ru/image6.png)

Более подробно о поддержке MISRA рассказано в статье "[PVS\-Studio: поддержка стандартов кодирования MISRA C и MISRA C\+\+](https://pvs-studio.ru/ru/blog/posts/cpp/0596/)"\.

## Заключение

В этой статье мы обзорно рассмотрели возможности анализатора PVS\-Studio для проверки проектов, ориентированных на встраиваемые системы\. Если вам нужна более подробная информация о том, как использовать анализатор, рекомендую почитать следующие статьи:

* [Знакомство со статическим анализатором кода PVS\-Studio](https://pvs-studio.ru/ru/docs/manual/0007/);
* [Система мониторинга компиляции в PVS\-Studio](https://pvs-studio.ru/ru/docs/manual/0031/);
* [Как запустить PVS\-Studio в Linux и macOS](https://pvs-studio.ru/ru/docs/manual/0036/);
* [PVS\-Studio SAST \(Static Application Security Testing, SAST\)](https://pvs-studio.ru/ru/pvs-studio/sast/);
* [Подавление ложных предупреждений](https://pvs-studio.ru/ru/docs/manual/0017/)\.