Генератор кода обеспечивает тулинг для вас, чтобы контролировать представление данных и, если у вас есть Embedded Coder®, функции точки входа в сгенерированном коде. Например, можно сконфигурировать данные и функции для генерации кода, чтобы они соответствовали стандартам и рекомендациям кода, интегрировать сгенерированный код с внешним кодом или адресовать требования к памяти.
Генератор кода производит код для элементов данных моделей и функций:
Данные, такие как входные порты, сигналы, состояния и параметры, которые ваш код приложения может считать и записывать.
Функции точки входа, такие как
, который ваш код приложения вызывает, чтобы выполнить алгоритм модели.model
_step
Можно сконфигурировать элементы данных моделей и функции для генерации кода с помощью интерфейса программирования Code Mappings editor или отображений кода (coder.mapping.api.CodeMapping
). Для конфигурирования функций требуется Embedded Coder. Для элементов данных используйте редактор Code Mappings или API отображения кода вместо, или в дополнение к созданию и настройке объектов данных Simulink. Редактор и API позволяют вам конфигурировать:
Настройки генерации кода по умолчанию, которые применяются в модели для категории элементов данных или функций
Настройки строения, которые применяются к отдельным элементам данных или функциям
Эта схема показывает общий рабочий процесс:
Когда вы открываете модель, созданную в релизе перед R2020b, Simulink ® переносит определения кода, указанные в модели, в отображения кода модели.
При необходимости в рамках миграции Simulink конфигурирует словарь Embedded Coder Dictionary, который использует модель. При сохранении модели отображений кода сохраняются как часть модели.
Для получения дополнительной информации, такой как эффекты миграции и что следует учитывать перед миграцией, смотрите Миграция строений данных модели к отображениям кода.
Определения кода включают классы памяти, шаблоны индивидуальной настройки функций и разделы памяти. Класс памяти определяет свойства, такие как внешний вид и местоположение, которые генератор кода использует при создании кода для связанных данных. Шаблон индивидуальной настройки функции определяет, как генератор кода создает код для функций. Для категории функции можно задать правило для имен функций и расположение в памяти для определений функции (раздел памяти).
Разделы памяти контролируют размещение данных и определений функций в памяти. В некоторых случаях можно выбрать конкретный раздел памяти, который требуется при конфигурировании элементов данных и функций.
Генератор кода обеспечивает предопределенные определения кода для элементов данных. Если у вас есть Embedded Coder, можно использовать Embedded Coder Dictionary для создания и совместного использования определений кода, например, для стандартизации кода, который вы генерируете из нескольких моделей или для создания определений для различных окружений во время выполнения приложения. Создание пользовательских определений позволяет вам достичь целей генерации кода, которым предопределенные определения не могут удовлетворить. Для элементов данных у вас также есть опция создания определений кода, созданных в пакетах с помощью Embedded Coder Custom Storage Class Designer.
Определения кода, которые вы создаете с помощью словаря Embedded Coder, появляются в Code Mappings editor и доступны с помощью API отображений кода. Для некоторых определений, которые вы создаете с помощью Custom Storage Class Designer, можно отобразить определения в редакторе Отображения, настроив словарь Embedded Coder для обращения к ним.
По умолчанию определения кода, которые вы создаете с помощью словаря Embedded Coder для модели, хранятся в файле модели. Вы можете делиться определениями кода между моделями и проектами, храня определения в Simulink® словарь данных. Со словарем данных, чтобы изменить общее определение, вы меняете определение в одном месте - словаре Embedded Coder.
Для получения дополнительной информации см. раздел «Определение классов памяти, разделов памяти и шаблонов функций для программной архитектуры» и «Создание классов памяти при помощи Custom Storage Class Designer».
Уменьшите усилия по подготовке модели к генерации кода C, задав строения по умолчанию для категорий элементов данных, например, inports или параметры рабочего пространства модели, по модели. Применение строений по умолчанию может сэкономить время и уменьшить риск введения ошибок в код, особенно для больших моделей и моделей, из которых вы генерируете мультиобразец.
Строения по умолчанию применяются во всей модели, исключая модели-ссылки. Simulink сохраняет отдельный набор отображений кода как часть каждой модели в иерархии модели-ссылки.
Если модель включает значительное количество элементов массива данной категории (для примера более 10), более эффективно конфигурировать категорию с помощью настройки по умолчанию, а затем переопределить эту настройку для особых случаев.
Настройки по умолчанию могут помочь вам уменьшить ручной ввод данных.
Когда вы добавляете блоки и сигналы к модели, новые элементы данных наследуют настройки по умолчанию.
Чтобы изменить настройки генерации кода сразу для многих элементов данных, внесите изменения в одно место - настройки по умолчанию.
Для эффективности используйте правила именования, когда вы вносите изменения в другом месте модели.
Вы конфигурируете настройки данных по умолчанию с помощью
вкладки Code Mappings editor Data Defaults или setDataDefault
функция.
Вы конфигурируете настройки данных по умолчанию с помощью
вкладки Code Mappings editor Data Defaults или setDataDefault
функция. На вкладке Data Defaults или вызове функции можно выбрать или указать эти категории элементов данных.
Категория элемента модели | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как блоки Inport и In Bus Element. |
Вспомогательные порты | Выходные порты корневого уровня модели, такие как блоки Outport и Out Bus Element. |
Сигналы, состояния и внутренние данные | Элементы данных, которые являются внутренними для модели, такие как выходные сигналы блоков, дискретные состояния блока, хранилища данных и сигналы пересечения нулем. |
Общие локальные хранилища данных | Data Store Memory блоки, которые имеют параметры блоков Share across model instances установленные. Эти хранилища данных доступны только в модели, где они определены. Значение хранилища данных разделяется между образцами модели. |
Глобальные данные | Данные хранятся, которые заданы сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Аргументы параметра модели | Параметры в рабочем пространстве модели, которые вы конфигурируете как аргументы модели. Эти параметры доступны в блоке модели, чтобы позволить каждому образцу модели предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor Parameters > Argument >. |
Параметры модели | Параметры, которые заданы в модели, такие как параметры в рабочем пространстве модели. Исключает аргументы модели. |
Внешние параметры | Параметры, которые вы определяете как объекты в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели. |
Константы | Выход блока с постоянными значениями и параметры, которые не могли быть встроены. Эти значения хранятся в переменных по одной из следующих причин.
|
Если для категории элементов данных задано значение по умолчанию Default
, у вас есть опция задать раздел памяти.
Перед конфигурированием настроек генерации кода по умолчанию для элементов данных примите во внимание факторам, перечисленные в этой таблице.
Фактор | Дополнительная информация |
---|---|
Какие категории относятся к вашей модели? | Категории элементов данных в предыдущей таблице |
Используется ли в модели несколько образцов данных, находящихся в категории? Если ответ да, применение отображений по умолчанию выгодно. В противном случае рассмотрите настройку генерации кода для каждого элемента данных по отдельности. | |
Какой класс памяти соответствует требованиям генерации кода для каждой категории? | Выберите класс памяти для контроля представления данных в сгенерированном коде |
Вы хотите, чтобы данные модели были структурированы? Для примера, если вы сконфигурировали модель для генерации кода мультиобразца, структуры могут улучшить эффективность кода и читаемость. | Организация данных в структуры в сгенерированном коде |
Требуется ли генератор кода для хранения данных в определенных областях памяти? Для примера рассмотрим, хранить ли данные инициализации в медленной памяти и алгоритмических или вычислительных данных в быстрой памяти. | |
Вы хотите помешать оптимизации исключить конкретные данные из кода? | Исключение категорий данных оптимизациями |
Необходимо ли определять новые классы памяти, которые можно выбрать в редакторе сопоставлений кода? |
После того, как вы сконфигурируете одну или несколько категорий элементов модели, установка разделов памяти и параметров конфигурации Shared utilities identifier format модели не влияет на строение модели. Когда вы открываете приложение кодера, Simulink переносит настройки параметра конфигурации модели в редактор Отображения. В рамках миграции Simulink конфигурирует словарь Embedded Coder Dictionary, который использует модель, как описано в Migration of Memory Section и Shared Utility Settings from Параметры Конфигурации to Code Mappings.
Оптимизация генерации кода может исключить данные из кода, что означает, что ваш код приложения не может взаимодействовать с данными. Для получения общей информации об устранении данных оптимизациями смотрите, Как Сгенерированный Код Хранит Внутренний Сигнал, Состояние и Данные Параметра.
Оптимизация может исключить данные только в этих категориях:
Model parameters
Model parameter arguments
External parameters
Internal data
После устранения данных с оптимизациями генератор кода применяет настройки генерации кода по умолчанию в отображениях кода к остальным данным. Для параметров и сигнальных линий оптимизация может исключить данные для целой категории. Если это исключение происходит, настройки по умолчанию, заданные для этой категории, не применяются к данным.
Чтобы предотвратить удаление оптимизации отдельных элементов данных, явно примените класс памяти к отдельному элементу. Класс памяти управляет внешним видом данных в сгенерированном коде. Чтобы заставить элемент данных использовать заданный по умолчанию класс памяти, явно примените класс памяти Model default
. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».
Если вы связываете модель со словарем данных Simulink, который включает словарь кодера, конфигурирующий определения кода по умолчанию для категорий данных, можно использовать редактор Отображения, чтобы применить значения по умолчанию словаря. В редакторе Отображения на вкладке Data Defaults выберите категорию и установите класс памяти равным Dictionary Default
. Если кто-то вносит изменения в настройки по умолчанию в словаре общего кодера, генератор кода применяет обновленные настройки по умолчанию при производстве кода для вашей модели. См. «Настройка отображения кода по умолчанию в общем словаре».
Уменьшите усилия по подготовке модели к генерации кода C, задав строения по умолчанию для категорий и функций, таких как инициализация/завершение и выполнение функций, по модели. Применение строений по умолчанию может сэкономить время и уменьшить риск введения ошибок в код, особенно для больших моделей и моделей, из которых вы генерируете мультиобразец.
Строения по умолчанию применяются во всей модели, исключая модели-ссылки. Simulink сохраняет отдельный набор отображений кода как часть каждой модели в иерархии модели-ссылки.
Если модель включает значительное количество функций заданной категории (для примера более 10), более эффективно конфигурировать категорию с помощью настройки по умолчанию, а затем переопределить эту настройку для особых случаев.
Настройки по умолчанию могут помочь вам уменьшить ручной ввод данных.
Когда вы добавляете блоки и сигналы к модели, новые функции наследуют настройки по умолчанию.
Чтобы изменить настройки генерации кода сразу для многих функций, внесите изменения в одно место - настройки по умолчанию.
Для эффективности используйте правила именования, когда вы вносите изменения в другом месте модели.
Вы конфигурируете параметры функции по умолчанию с помощью
вкладки Code Mappings editor Function Defaults или setDataDefault
функция. На вкладке Function Defaults или вызове функции можно выбрать или указать эти категории функций.
Категория функции модели | Описание |
---|---|
Инициализация/завершение | Функции точки входа для инициализации и завершения |
Выполнение | Функции точки входа для инициирования выполнения и сброса |
Общая утилита | Общие служебные функции |
Генератор кода использует правила именования по умолчанию, чтобы назвать функции точки входа. Чтобы интегрировать сгенерированный код с существующим внешним кодом или соответствовать стандартам именования или руководствам, можно настроить правило именования по умолчанию. Корректировка правила именования по умолчанию может сэкономить время, особенно для многоскоростных моделей, для которых генератор кода производит уникальную step
функция для каждой скорости.
Может потребоваться определить шаблон индивидуальной настройки функции в словаре Embedded Coder. Если кто-то не определил шаблоны индивидуальной настройки функции для модели, редактор Отображения представляет Default
как единственная опция шаблона.
Перед настройкой настроек генерации кода по умолчанию для функций примите во внимание факторам, перечисленные в этой таблице.
Фактор | Дополнительная информация |
---|---|
Какие категории относятся к вашей модели? | Категории функций в предыдущей таблице |
Используется ли в модели несколько образцов функций, входящих в категорию? Если ответ да, применение отображений по умолчанию выгодно. В противном случае рассмотрите настройку генерации кода для каждой функции индивидуально. | Сконфигурируйте генерацию кода C для функций точки входа модели |
Какой шаблон индивидуальной настройки функции соответствует требованиям генерации кода для каждой категории? | Задайте классы памяти, разделы памяти и шаблоны функций для программной архитектуры |
Требуется ли генератору кода хранить код функции в определенных областях памяти? Для примера рассмотрим, хранить ли данные инициализации в медленной памяти и алгоритмических или вычислительных данных в быстрой памяти. | |
Необходимо ли определять новые шаблоны индивидуальной настройки функций, которые можно выбрать в редакторе сопоставлений кода? | |
У вас есть требования к именованию функций? Если ответ да, каковы они? К каким категориям применяются требования? |
После того, как вы сконфигурируете одну или несколько категорий элементов модели, установка разделов памяти и параметров конфигурации Shared utilities identifier format модели не влияет на строение модели. Когда вы открываете приложение кодера, Simulink переносит настройки параметра конфигурации модели в редактор Отображения. В рамках миграции Simulink конфигурирует словарь Embedded Coder Dictionary, который использует модель, как описано в Migration of Memory Section и Shared Utility Settings from Параметры Конфигурации to Code Mappings.
Если вы связываете модель со словарем данных Simulink, который включает словарь кодера, конфигурирующий определения кода по умолчанию для категорий функций, можно использовать редактор Отображения, чтобы применить значения по умолчанию словаря. В редакторе Отображения на вкладке Function Defaults выберите категорию и установите шаблон индивидуальной настройки функции на Dictionary Default
. Если кто-то вносит изменения в настройки по умолчанию в словаре общего кодера, генератор кода применяет обновленные настройки по умолчанию при производстве кода для вашей модели. См. «Настройка отображения кода по умолчанию в общем словаре».
После того, как вы сконфигурируете настройки по умолчанию всей модели, можно переопределить значения по умолчанию для отдельных элементов данных и функций. Индивидуальный элемент данных или строение функции применяется к определенному элементу данных или функции в модели. Сконфигурируйте элементы и функции данных индивидуально, когда:
Модель включает несколько элементы массива данной категории, которые имеют уникальные требования к источнику, именованию или размещению.
Вы сконфигурировали настройки по умолчанию и хотите переопределить настройку по умолчанию для отдельного элемента.
Для отдельных элементов данных первоначально для класса памяти задано значение Auto
, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет строение модели по умолчанию.
Чтобы избежать оптимизации и заставить генератор кода использовать строение по умолчанию, установите класс памяти равным Model default
.
Чтобы переопределить строение по умолчанию, задайте класс памяти, который удовлетворяет требованиям генерации кода для этого элемента данных.
Если элемент данных в модели не называется (для примера сигнал не имеет метки или состояние не имеет имени), вы должны задать идентификатор кода для элемента данных при конфигурировании его для Генерации кода C. Установите идентификатор кода путем определения значения для Identifier свойства класса памяти.
Для отдельных функций можно настроить имя функции. Для функций выполнения, таких как пошаговые функции и функции Simulink для модели, можно сконфигурировать аргументы функции.
Откройте приложение Embedded Coder.
Сконфигурируйте отображения по умолчанию для категорий элементов данных. Выберите Code Interface > Default Code Mappings. В редакторе Отображения на вкладке Data Defaults выберите категорию элемента модели и установите класс памяти. В Property Inspector установите свойства класса памяти так, чтобы они совпадали с требованиями модели.
Если необходимо определить класс памяти, используйте словарь Embedded Coder. Выберите Code Interface > Embedded Coder Dictionary.
Решите, следует ли переопределять настройки строения по умолчанию для отдельных элементов данных. Если вы решили не переопределять настройки, перейдите к шагу 8.
Идентифицируйте переменный MATLAB, которые вы хотите сконфигурировать по отдельности, и сохраните строения в файле модели. В Model Explorer преобразуйте переменные в Simulink.Parameter
объекты. Получившиеся объекты данных появляются в редакторе Отображения в качестве параметров модели.
Идентифицируйте сигналы, представляющие данные алгоритма, которые вы хотите контролировать, в то время как сгенерированный код выполняет и конфигурируйте эти сигналы индивидуально. Для каждого сигнала, который вы идентифицируете, выполните одно из следующих действий:
Для данных о сигнале, который характерен для модели (не является общим), добавьте сигналы к редактору Отображения.
Для данных общего сигнала создайте и сконфигурируйте Simulink.Signal
объекты.
Сконфигурируйте отдельные элементы данных. В редакторе Отображения щелкните вкладку категории, выберите элемент данных и установите класс памяти. В Property Inspector задайте значения свойств классов памяти. Чтобы изменить настройку параметра конфигурации модели Default parameter behavior, щелкните ссылку, указывающую поведение, когда класс памяти установлен на Auto
. В диалоговом окне Model Configuration Parameters измените настройку параметра на Tunable
или Inline
.
Для получения информации о конфигурировании определенных типов элементов данных смотрите:
Чтобы просмотреть и сконфигурировать внешние объекты данных, которые хранятся в базовом рабочем пространстве или словаре данных, в редакторе Отображения, на вкладке Data Defaults, нажмите Refresh
ссылка справа от имени категории.
Сгенерируйте и проверьте код.
Для получения дополнительной информации и примеров смотрите:
Задайте классы памяти, разделы памяти и шаблоны функций для программной архитектуры
Сконфигурируйте генерацию кода C по умолчанию для категорий элементов данных и функций
Сконфигурируйте блоки входных портов корневого уровня для генерации кода C
Сконфигурируйте блоки исходящего порта корневого уровня для генерации кода C
Сконфигурируйте генерацию кода C для функций точки входа модели
Откройте приложение Embedded Coder.
Сконфигурируйте отображения по умолчанию для категорий функций. Выберите Code Interface > Default Code Mappings. В редакторе Отображения на вкладке Function Defaults выберите категорию функции и установите шаблон индивидуальной настройки функции.
Может потребоваться определить шаблон индивидуальной настройки функции. По умолчанию шаблоны недоступны. Чтобы определить шаблон индивидуальной настройки функции, используйте словарь Embedded Coder. Выберите Code Interface > Embedded Coder Dictionary.
Решите, следует ли переопределять настройки строения по умолчанию для отдельных функций. Если вы решили не переопределять настройки, перейдите к шагу 5.
Сконфигурируйте отдельные функции точки входа. В редакторе Отображения щелкните Functions вкладке, выберите функцию и установите шаблон индивидуальной настройки функции. Также можно задать имя функции. Для функций выполнения, таких как шаговая функция модели, можно настроить аргументы функции. При нажатии на ссылку предварительного просмотра функции открывается диалоговое окно, которое можно использовать для настройки всего интерфейса функции.
Сгенерируйте и проверьте код.
Для получения дополнительной информации и примеров смотрите:
Редактор отображений кода | coder.mapping.api.CodeMapping
| Embedded Coder