Можно использовать Model Advisor, чтобы анализировать модель для генерации кода и идентифицировать аспекты модели, которые препятствуют производственному развертыванию или ограничивают эффективность кода. Можно выбрать из набора проверок, чтобы работать на текущей настройке модели. Model Advisor анализирует модель и генерирует результаты проверки, обеспечивающие предложения для улучшений каждой области. Большая часть диагностики Model Advisor не требует, чтобы модель была в скомпилированном состоянии; те, которые делают, отмечены.
Прежде, чем запустить Model Advisor, выберите цель, которую вы планируете использовать для генерации кода. Model Advisor работает наиболее эффективно с ERT и основанными на ERT системными конечными файлами.
Используйте следующие примеры, чтобы исследовать модели оптимизации для генерации кода, использующей Model Advisor:
Модели rtwdemo_advisor2
и rtwdemo_advisor3
в качестве примера требуют программное обеспечение Fixed-Point Designer™ и Stateflow®.
Для получения дополнительной информации об использовании Model Advisor смотрите Осуществленные Образцовые Проверки (Simulink). Для получения дополнительной информации о проверках, смотрите Проверки Simulink Coder (Simulink Coder).
Это ограничение препятствует тому, чтобы длинные списки параметров появились в коде, сгенерированном для графической функции. Можно получить доступ к локальным данным, которые находятся в том же графике как графическая функция. Для получения дополнительной информации смотрите Шаблоны Логики Повторного использования путем Определения Графических функций (Stateflow).
Когда вы будете использовать графическую функцию в диаграмме Stateflow, выберите Inline
или Function
для свойства Function Inline Option. В противном случае код, сгенерированный для графической функции, не может появиться, как вы хотите. Для получения дополнительной информации смотрите Specify Graphical Function Properties (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
, который может быть нежелательным для вашего приложения.
Используйте Советника по вопросам Обновления, чтобы обновить более старые модели (сохраненный предыдущими версиями или текущей версией), чтобы использовать текущие функции. Для получения дополнительной информации смотрите Обновление моделей (Simulink).
Перед созданием оптимизация набора отмечает для компилятора (например, -O2
для gcc
, -Ot
для Microsoft® Visual C ++® компилятор).
Непосредственно встроенные S-функции C/C++ в сгенерированный код путем записывания файла TLC для S-функции. Для получения дополнительной информации смотрите, Ускорьте Симуляцию, Код Повторного использования, или Защищайте Интеллектуальную собственность при помощи Цели S-функции (Simulink Coder) и смотрите Встроенные S-функции MEX C (Simulink Coder).
Используйте тип данных Simulink кроме double
, если это возможно. Доступными типами данных является Boolean
, подписанные и 8-без знака, 16-, и 32-битные целые числа, и 32-и 64-битные плавания (double
является 64-битным плаванием). Для получения дополнительной информации займитесь Типами данных в Simulink (Simulink). Для сводных данных блока блоком нажмите showblockdatatypetable
или введите команду в Командном окне.
Для настраиваемых параметров блоков, которые вы конфигурируете, чтобы сохранить в памяти в сгенерированном коде, можно совпадать с типами данных параметров типам данных сигнала, чтобы устранить ненужные преобразования типа и сдвиги C. Где возможно, значения параметров хранилища в небольших целочисленных типах данных. Смотрите Типы данных параметров в Сгенерированном коде.
Удалите повторенные значения в данных об интерполяционной таблице.
Используйте блок Merge, чтобы объединить вывод сигналов по мере возможности. Этот блок особенно полезен, когда необходимо управлять выполнением подсистем вызова функций с диаграммой Stateflow. Следующая модель показывает пример того, как использовать блок Merge.
Когда больше чем один сигнал, соединенный с блоком Merge, имеет non-Auto
класс памяти, все сигналы non-Auto
, соединенные с тем блоком, должны быть тождественно маркированы и иметь тот же класс памяти. Когда блоки Слияния соединяются непосредственно друг с другом, эти правила применяются к сигналам, соединенным с любым из блоков Слияния в группе.