Инструменты и методов оптимизации

Используйте Model Advisor, чтобы оптимизировать модель для генерации кода

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

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

Используйте следующие примеры, чтобы исследовать оптимизацию моделей для генерации кода с помощью Model Advisor:

Примечание

Примеры моделей rtwdemo_advisor2 и rtwdemo_advisor3 Требовать Stateflow® и программное обеспечение Fixed-Point Designer™.

Для получения дополнительной информации об использовании Model Advisor, смотрите Запуск проверок Model Advisor. Для получения дополнительной информации о проверках смотрите Simulink Coder Checks.

Советы по проектированию для оптимизации сгенерированного кода для объектов Stateflow

Не получайте доступ к данным, помеченным машиной, в графической функции

Это ограничение препятствует появлению длинных списков параметров в коде, сгенерированном для графической функции. Вы можете получить доступ к локальным данным, которые находятся на том же графике, что и графическая функция. Для получения дополнительной информации см. «Повторное использование логических шаблонов путем определения графических функций (Stateflow)».

Явное описание встроенной опции графической функции

Когда вы используете графическую функцию в диаграмме Stateflow, выберите Inline или Function для Function Inline Option свойств. В противном случае код, сгенерированный для графической функции, может появиться не так, как вы хотите. Для получения дополнительной информации см. «Задание свойств графических функций (Stateflow)».

Избегайте использования нескольких событий, вызванных кромками, в диаграммах Stateflow

Если вы используете более одного триггера, вы генерируете несколько операторов кода для обработки обнаружений восходящего или падающего ребра. Если требуется несколько триггеров, используйте вместо этого события вызова функции. Для получения дополнительной информации смотрите Активировать диаграмму Stateflow путем отправки входных событий (Stateflow).

Объедините входные сигналы графика в один объект шины

Когда вы используете объект шины, вы уменьшаете количество параметров в списке параметров сгенерированной функции. Это руководство также применяется к выходным сигналам графика. Для получения дополнительной информации смотрите Задать структуры Stateflow (Stateflow).

Используйте графики с дискретными шагами расчета

Код, сгенерированный для дискретных графиков, которые не находятся внутри триггерированной или активированной подсистемы, использует целочисленные счетчики, чтобы отслеживать время вместо Simulink® предоставленное время. Это позволяет более эффективно генерировать код с точки зрения служебных данных и памяти, а также включать этот код для использования в симуляциях «цикл» (SIL) и «цикл» (PIL).

Дополнительные методы оптимизации

Можно применить следующие методы для оптимизации модели для генерации кода:

  • Для Embedded Coder® пользователи, если ваше приложение использует только целочисленную арифметику, очистите параметр Support floating-point numbers в Software environment разделе панели Interface, чтобы сгенерированный код не содержал данных или операций с плавающей точкой. Когда этот параметр очищен, возникает ошибка, если в процессе генерации кода встречаются нецелочисленные данные или выражения. Сообщение об ошибке сообщает о нарушающих блоках и параметрах.

  • Отключите параметр Configuration Parameters Code Generation > Interface > Advanced parameters > MAT-file logging >. Отмена выбора этого параметра устраняет дополнительное использование кода и памяти для инициализации, обновления и очистки переменных регистрации. В сложение код, сгенерированный для поддержки MAT-файлов, логгирование вызывает malloc, что может быть нежелательно для вашего приложения.

  • Используйте Upgrade Advisor, чтобы обновить старые модели (сохраненные предыдущими версиями или текущей версией), чтобы использовать текущие функции. Для получения дополнительной информации смотрите Обновление моделей.

  • Перед созданием установите флаги оптимизации для компилятора (для примера, -O2 для gcc, -Ot для Microsoft® Визуальный C++® компилятор).

  • Непосредственно встроенный C/C + + S-функции в сгенерированный код путем записи TLC-файла для S-функции. Для получения дополнительной информации смотрите Ускорение симуляции, Повторное Использование Кода или Защита Интеллектуального Свойства при Помощи S-Function Target и см. Inline C MEX S-Functions.

  • Используйте тип данных Simulink, отличный от double когда это возможно. Доступные типы данных Boolean, подписанные и беззнаковые 8-, 16- и 32-битные целые числа и 32- и 64-битные числа с плавающей точкой (a double - 64-битный с плавающей точкой). Для получения дополнительной информации смотрите О типах данных в Simulink. Для сводных данных блока за блоком нажмите showblockdatatypetable или введите команду в Командном окне.

  • Для настраиваемых параметров блоков, которые вы конфигурируете, чтобы хранить в памяти в сгенерированном коде, можно сопоставить типы данных параметра с типами данных сигнала, чтобы исключить ненужные typecasts и сдвиги C. Где это возможно, сохраните значения параметров в малых целочисленных типах данных. Смотрите Типы данных параметров в Сгенерированном коде.

  • Удалите повторные значения в данных интерполяционной таблицы.

  • Используйте блок Merge, чтобы объединить выходные данные сигналов по возможности. Этот блок особенно полезен, когда вам нужно контролировать выполнение подсистем вызова функций с диаграммой Stateflow. Следующая модель показывает пример использования блока Merge.

    Когда более одного сигнала, соединенного с блоком Merge, имеет Auto не - класс памяти, все не Auto сигналы, подключенные к этому блоку, должны быть идентичными и иметь одинаковый класс памяти. Когда блоки Merge соединяются непосредственно друг с другом, эти правила применяются к сигналам, соединенным с любым из блоков Merge в группе.

Похожие темы