Генератор кода выполняет статический анализ сгенерированного кода C или C++ и предоставляет эти метрики в разделе «Отчет о метриках статического кода» отчета о создании кода HTML. При наведении курсора на функцию или переменную в сгенерированном коде можно также увидеть метрики.
Информацию в отчете можно использовать для:
Найдите количество файлов и строк кода в каждом файле.
Оцените количество строк кода и использование стека для каждой функции.
Сравните разницу между количеством файлов, функций, переменных и строк кода при каждом изменении модели или алгоритма MATLAB ®.
Определите целевую платформу и выделение ОЗУ стеку на основе размера глобальных переменных плюс расчетного размера стека.
Определите возможные точки замедления производительности, например, самые большие глобальные переменные или наиболее дорогостоящий путь вызова с точки зрения использования стека.
Просмотрите цикломатическую сложность функции, которая подсчитывает количество линейно независимых путей через функцию.
Просмотрите дерево вызовов функций. Определите самый длинный путь вызова для оценки времени выполнения наихудшего случая.
Просмотрите, как целевые функции, предоставляемые выбранной библиотекой замены кода, используются в созданном коде.
Примеры см. в разделе:
Статический анализ генерируемого кода выполняется только по исходному коду без выполнения программы. Результаты анализа метрик статического кода включены в раздел «Метрики статического кода» отчета о создании кода HTML. Отчет недоступен, если функция MEX создается из кода MATLAB.
Статический анализ созданных файлов исходного кода:
Использует указанные типы данных C. Для моделей Simulink ® эти типы данных указываются на панели Аппаратная реализация > Производственное оборудование диалогового окна Параметры конфигурации. Для создания кода из кода MATLAB их можно указать на вкладке «Оборудование» диалогового окна «Параметры проекта MATLAB Coder™» или с помощью объекта конфигурации создания кода. Фактические метрики объектного кода могут отличаться из-за параметров компилятора и платформы для конкретного объекта.
Включает пользовательский код, только если он указан. Для моделей Simulink пользовательский код указывается на панели Создание кода (Code Generation) > Пользовательский код (Custom Code) в конфигурации модели. Для создания кода из кода MATLAB необходимо указать его на вкладке Отладка (Debugging) диалогового окна Настройки проекта кодера MATLAB (MATLAB Coder project settings) или с помощью объекта конфигурации генерации кода. Отчет об ошибке генерируется, если созданный код включает файлы, специфичные для платформы, не содержащиеся в стандартной библиотеке времени выполнения Си.
Для моделей Simulink включает созданный код из ссылочных моделей.
Использует 1-байтовое выравнивание для всех элементов структуры для оценки глобальных и локальных размеров структуры данных. Размер структуры вычисляется суммированием размеров всех ее полей. Эта оценка представляет наименьший возможный размер для структуры.
Вычисляет размер собственного стека функции как размер локальных данных в функции, исключая входные аргументы. Размер накопленного стека функции - это размер собственного стека плюс максимум размеров накопленного стека ее называемых функций. Например, если накопленные размеры стеков для вызываемых функций представлены как accum_size1...accum_sizeN, то накопленный размер стека для функции
accumulated_stack_size = self_stack_size + max(accum_size1,...,accum_sizeN)
Например, рассмотрим этот фрагмент сгенерированного кода:

Рассмотрим следующие метрики кода:

Накопленный размер стека равен 12 байтам, так как размер собственного стека функции Debug_b равно 12 байтам, и 4 входных аргумента не способствуют вычислению размера накопленного стека.
При оценке размера стека функции статический анализ останавливается на первом экземпляре рекурсивного вызова. Таблица Информация о функции (Function Information) указывает, когда рекурсия происходит в пути вызова функции. Генерация кода генерирует только рекурсивный код для трансляции событий Stateflow и для графических функций, если он записан как рекурсивная функция.
Вычисляет цикломатическую сложность функции как число решений плюс один:
CC = Number of decisions + 1
Оператор if
Оператор Else-If
Оператор переключения (1 решение для каждого case ветвь)
Операторы цикла: While, For, Do-while
Примечание
Логические операторы в предшествующих конструкциях не добавляют дополнительных решений.
Не включает ert_main.c, потому что у вас есть возможность предоставить свой собственный main.c.
При просмотре кода в отчете о создании кода для доступа к метрикам и определениям кода:
Если на панели Создание кода (Code Generation) > Отчет (Report) установлен флажок Статические метрики кода (Static code metrics), можно поместить курсор на глобальные переменные и функции в окне кода, чтобы просмотреть информацию о метриках кода.

В окне кода, если щелкнуть связанные переменные или функции, откроется окно проверки кода. В окне содержатся ссылки на определения переменных или функций. Если на панели Создание кода (Code Generation) > Отчет (Report) установлен флажок Статические метрики кода (Static code metrics), можно также просмотреть сведения о метриках кода для переменной или функции.

При просмотре кода в представлении «Код» ракурса «Код» наведите курсор на меню многоточия над глобальными переменными и функциями для просмотра информации о метриках кода.

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