Оценка эффективности сгенерированного кода

Узнайте, как характеристики сгенерированного кода и данных RAM/ROM влияют на метрику RAM/ROM.

Для получения информации о модели примера и других примерах в этой серии, смотрите Подготовьте модель алгоритма управления для генерации кода C.

Оценка кода

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

Можно также классифицировать использование памяти как ПЗУ (память только для чтения) и ОЗУ (память с произвольным доступом).

  • Доступ к данным из ОЗУ происходит быстрее, чем доступ к данным из ПЗУ.

  • Исполняемые файлы и данные должны храниться в ПЗУ, поскольку ОЗУ не поддерживает данные между циклами степени.

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

Информация о компиляторе

В этой оценке используется компилятор Freescale™ CodeWarrior ®.

  • Компилятор: Freescale™ CodeWarrior ®

  • Версия: 5.5.1.1430

  • Целевой процессор: Power PC 565

Просмотр метрик кода

Как описано в Build Integrated Code Outside the Окружение Simulink и Test Generated Code, сгенерированный код может потребовать использования служебных функций. На служебные функции ложится разовая фиксированная стоимость памяти. Из-за этих фиксированных накладных расходов данные в этом примере показывают использование памяти для:

  • Алгоритмы: Код C, сгенерированный из блоков Simulink ® плюс функции определения данных

  • Утилиты: Функции, которые являются частью источника библиотеки Coder™ Simulink ®

  • Полный: Сумма как алгоритма, так и утилит

Строение опций сборки

В трех аналитических отчетах в этом примере используется одно и то же строение сборки. Freescale™ CodeWarrior ® был настроен, чтобы минимизировать использование памяти и применить все применимые оптимизации.

Строение 1: переиспользуемые функции с типом данных Double

  • Исходные файлы: PCG_Eval_File_1.zip

  • Тип данных: Все двойной точности

  • Включенные данные: Проект включает все данные, которые требуются сборке (включая данные, объявленные как extern: pos_rqst, fbk_1, и fbk_2)

  • Главная функция: Измененная версия example_main от сборки интегрированного кода за пределами окружения Simulink

  • Метод вызова функции: переиспользуемые функции для ПИ-контроллеров

Использование памяти

            Function    Data
Algorithms  1172 bytes  549 bytes
Utilities   592 bytes   40 bytes
Full        1764 bytes  589 bytes

Строение 2: переиспользуемые функции с одним типом данных

В этом строении данные модели используют тип данных с одной точностью с плавающей точностью вместо двойной точности.

Моделирование Строения

  • Исходные файлы: PCG_Eval_File_2.zip

  • Тип данных: Все синглы

  • Включенные данные: Проект включает все данные, которые требуются сборке (включая данные, объявленные как extern: pos_rqst, fbk_1, и fbk_2)

  • Главная функция: Измененная версия example_main от сборки интегрированного кода за пределами окружения Simulink

  • Метод вызова функции: переиспользуемые функции для ПИ-контроллеров

Использование памяти

            Function    Data
Algorithms  800 bytes   308 bytes
Utilities   592 bytes   40 bytes
Full        1392 bytes  348 bytes

В этом строении используется только 56% памяти данных из первого строения: 308 байт вместо 549 байт. Это строение также использует 68% памяти функции: 800 байт вместо 1172 байт. Для этой системы использование одинарной точности вместо двойной точности не влияет на точность алгоритма управления, поэтому можно использовать это строение для достижения более эффективного кода.

Строение 3: Неотменяемые функции с типом данных Single

  • Исходные файлы: PCG_Eval_File_3.zip

  • Тип данных: Все синглы

  • Включенные данные: Проект включает все данные, которые требуются сборке (включая данные, объявленные как extern: pos_rqst, fbk_1, и fbk_2)

  • Главная функция: Измененная версия example_main от сборки интегрированного кода за пределами окружения Simulink

  • Метод вызова функции: Интерфейс функции void void таким образом, обмен данными происходит через глобальные переменные

Использование памяти

            Function    Data
Algorithms  948 bytes   348 bytes
Utilities   592 bytes   40 bytes
Full        1540 bytes  388 bytes

Это строение потребляет больше данных и памяти функций, чем предыдущее строение.

Похожие темы