Статические метрики кода

Статические метрики кода

Генератор кода выполняет статический анализ сгенерированного кода C or C++ и обеспечивает эти метрики в разделе Static Code Metrics Report Отчета Генерации КОДА HTML. Когда вы устанавливаете свой курсор на функцию или переменную в сгенерированном коде, можно также видеть метрики.

Можно использовать информацию в отчете к:

  • Найдите количество файлов и строк кода в каждом файле.

  • Оцените количество строк кода и использования стека на функцию.

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

  • Определите целевую платформу и выделение RAM к стеку, на основе размера глобальных переменных плюс предполагаемый размер стека.

  • Определите возможную эффективность медленные точки, такие как самые большие глобальные переменные или самый дорогостоящий путь к вызову в терминах использования стека.

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

  • Просмотрите дерево вызова функции. Определите самый длинный путь к вызову, чтобы оценить худшую синхронизацию выполнения случая.

  • Просмотрите, как целевые функции, обеспеченные выбранной заменяющей библиотекой кода, используются в сгенерированном коде.

Для примеров см.:

Статический метрический анализ кода

Статический анализ сгенерированного кода выполняется только на исходном коде, не выполняя программу. Результаты статического метрического анализа кода включены в раздел Static Code Metrics Отчета Генерации КОДА HTML. Отчет не доступен, если вы генерируете MEX-функцию из кода MATLAB.

Статический анализ сгенерированных файлов исходного кода:

  • Использует заданные типы данных C. Для Simulink® модели, вы задаете эти типы данных в Hardware Implementation> панель Production hardware диалогового окна Configuration Parameters. Для генерации кода из кода MATLAB вы задаете их во вкладке Hardware диалогового окна настроек проекта MATLAB Coder™ или использования объекта настройки генерации кода. Метрики фактического объекта кода могут отличаться из-за целевого компилятора и настроек платформы.

  • Включает пользовательский код, только если вы задаете его. Для моделей Simulink вы задаете пользовательский код на Code Generation> панель Custom Code в настройке модели. Для генерации кода из кода MATLAB вы задаете его на вкладке Debugging диалогового окна настроек проекта MATLAB Coder или использования объекта настройки генерации кода. Сообщение об ошибке сгенерировано, если сгенерированный код включает специфичные для платформы файлы, не содержавшиеся в стандарте C библиотека времени выполнения.

  • Для моделей 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

    • Оператор switch (1 решение для каждого case перейдите),

    • Инструкции циклов: В то время как, поскольку, Делают - в то время как

    Примечание

    Булевы операторы в предыдущих построениях не добавляют дополнительные решения.

  • Не включает ert_main.c, потому что у вас есть опция, чтобы обеспечить ваш собственный main.c.

Просмотрите статические метрики кода и определения в сгенерированном коде

Когда вы просматриваете код в Представлении кода или в отчете генерации кода, устанавливаете ваш курсор на меню замещающего знака выше глобальных переменных и функций, чтобы видеть информацию о метриках кода.

Generated code showing cursor hovering over rtDwork variable and box with code definition and code metrics details.

Подсказка обеспечивает ссылку на определение для переменной или функции.

Generated code showing highlighted line with declaration of rtDwork variable.

Статические метрические ограничения отчета кода

Статические метрики кода не доступны, если целевая настройка для модели приводит к сгенерированному коду что:

  • Включает заголовочный файл, который не сгенерирован иерархией модели и не является системным заголовочным файлом

  • Использует макрос, который не распознан

Для просмотра документации необходимо авторизоваться на сайте