Когда вы генерируете код из модели, код включает данные проектирования, такие как сигналы, состояния и параметры, из которых ваш код приложения может читать и записать в. При решении, как вы хотите эти данные, представленные в сгенерированном коде, рассмотрите:
Какие типы элементов данных я хочу использовать в своей модели?
Где я хочу хранить данные?
Каковы мои цели генерации кода?
Как я могу сконфигурировать данные, чтобы достигнуть моих целей генерации кода?
Ответы на эти вопросы зависят от вашей архитектуры модели (автономная модель, автономная иерархия моделей, на которые ссылаются или система компонентов), ваш тип приложения (повторно используемый или одно экземпляр), и интегрируете ли вы свой код с существующим внешним кодом.
Возможные элементы данных в вашей модели подпадают под типы элемента данных, перечисленные в этой таблице.
Тип элемента данных | Описание |
---|---|
Inports | Входные порты корневого уровня модели, такие как Inport и блоки Bus Element In. |
Выходные порты | Выходные порты корневого уровня модели, такие как Outport и блоки Bus Element Out. |
Ограниченные по объему моделью параметры |
|
Внешние параметры | Параметры, которые вы задаете как объекты в базовом рабочем пространстве или в словаре данных. Многоуровневые модели в приложении могут использовать эти параметры. |
Хранилища данных |
|
Внутренние данные | Локальные данные, такие как внутренние сигналы и состояния блока. Включает локальные хранилища данных. |
Константы | Постоянные параметры и блок постоянного значения выводятся в модели. |
Параметры конфигурации кода, доступные для ваших данных, зависят от категории данных, которые вы конфигурируете. То, где вы храните данные, определяет, конфигурируете ли вы их при помощи объекта данных или при помощи кода, сопоставляющего, который сохранен с моделью.
То, где вы храните данные для своей модели, может зависеть от типа архитектуры модели, которую вы используете и ваши цели моделирования:
Базовое рабочее пространство MATLAB® — Используемый для временного хранения данных при экспериментировании с техниками моделирования.
Рабочее пространство модели — Используемый, чтобы постоянно хранить данные, которые локальны для одной модели. Поскольку данные хранятся с моделью, использование этой рабочей области может улучшить мобильность модели. Рабочее пространство модели преимущественно используется, чтобы сохранить параметры, аргументы и числовые переменные. Эти элементы обычно не хранятся в рабочем пространстве модели:
Объекты сигнала — Вы не можете сконфигурировать объект сигнала в рабочем пространстве модели для генерации кода. Вы не должны задавать объект сигнала сконфигурировать сигнал для генерации кода.
Объекты типа данных.
Словарь данных Simulink® — Используемый, чтобы постоянно хранить глобальные данные, типы данных и данные, которые совместно используются моделями.
Для получения дополнительной информации смотрите, Определяют, Где Сохранить Переменные и Объекты для Моделей Simulink.
Настраиваете ли вы генерацию своих данных для генерации кода, зависит от ваших целей для сгенерированного кода. Если вы принимаете решение не сконфигурировать индивидуальные настройки, генератор кода определяет, устранить ли или изменить представление данных в сгенерированном коде в целях оптимизации.
Существует много причин, вы можете принять решение сконфигурировать элемент данных. Конфигурирование данных предотвращает оптимизацию, которая может устранить элемент данных из сгенерированного кода и позволяет вам сконфигурировать, как сгенерированный код хранит и задает элемент данных. Например, если вы конфигурируете элемент данных, вы можете:
Настройки параметров.
Контролируйте сигналы и состояния во время выполнения.
Сконфигурируйте размещение данных в памяти.
Обменивайтесь данными с внешним кодом.
Улучшите удобочитаемость и трассируемость сгенерированного кода.
Чтобы сконфигурировать ваши данные для генерации кода, примените класс памяти. Класс памяти является настройкой генерации кода, которая позволяет вам управлять внешним видом и размещением элемента данных в сгенерированном коде и предотвращает оптимизацию, которая может устранить устройство хранения данных для того элемента данных. Можно использовать классы памяти, доступные с Simulink Coder™ и Embedded Coder®. Если у вас есть особые требования, которым не отвечают эти классы памяти, и вы генерируете код для основанной на ERT цели, можно задать и использовать новый класс памяти. Для получения дополнительной информации о классах памяти и свойствах класса памяти, смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Для большинства данных модели можно сопоставить класс памяти непосредственно с элементом данных при помощи редактора Отображений Кода или кода, сопоставляющего API. Необходимо сконфигурировать некоторые данные, включая которые модель использует для генерации кода при помощи объекта данных:
Параметры — Включают параметры в базовое рабочее пространство, рабочее пространство модели или словарь данных. Сконфигурируйте параметры при помощи Simulink.Parameter
объект.
Хранилища глобальных данных — Конфигурируют при помощи объекта сигнала.
Прежде, чем сконфигурировать числовые переменные для генерации кода, необходимо преобразовать их в Simulink.Parameter
объекты.
Данные модели состоят из блоков выходного порта, сигнальных линий, состояний блока, хранилищ данных и объектов параметра в рабочем пространстве модели. Для этих данных можно сопоставить класс памяти с элементом данных в приложении кодера при помощи редактора Отображений Кода или при помощи API отображений кода. Для удобства можно также сконфигурировать внешние объекты данных в редакторе Отображений Кода, хотя для внешних объектов данных, класс памяти хранится на объекте данных а не в модели. Чтобы видеть эти объекты, в редакторе, щелкают по ссылке Refresh справа от названия категории.
Чтобы сконфигурировать данные модели, вы сначала конфигурируете настройки генерации кода по умолчанию для категорий элементов данных. Используя отображение по умолчанию экономит время и снижает риск представления ошибок в коде, особенно когда ваша модель содержит значительное количество элементов в конкретной категории.
Во вкладке C Code выберите Code Interface > Default Code Mappings.
На вкладке Data Defaults выберите категорию данных, затем выберите класс памяти по умолчанию для той категории. Если вы не задаете класс памяти для категории, Default
класс памяти применяется. В этом случае генератор кода помещает код для категории элементов данных в стандартных структурах. Другие опции класса памяти включают:
Соответствующие встроенные классы памяти, такие как ExportedGlobal
.
Соответствующие классы памяти в доступном пакете, такие как ImportFromFile
(требует Embedded Coder).
Классы памяти задали в Словаре Embedded Coder (требует Embedded Coder). Для получения дополнительной информации о доступных классах памяти смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
В Property Inspector сконфигурируйте свойства для того класса памяти. (Например, заголовок и файлы определения).
Для получения дополнительной информации см. Настройка генерации кода C для элементов интерфейса моделиНастройка генерации кода C для элементов интерфейса модели (Embedded Coder).
Для определенных категорий данных, включая импорт, выходные порты, хранилища данных и состояния блока, отображение по умолчанию вероятно единственная настройка, которую необходимо выполнить. Но для элементов данных, таких как параметры и внутренние сигналы, вы можете должны быть задать индивидуума, сопоставляющего, чтобы препятствовать тому, чтобы данные были оптимизированы далеко. Применять класс памяти к отдельному элементу данных:
В редакторе Отображений Кода найдите элемент данных на его соответствующей вкладке категории (например, чтобы сконфигурировать отдельный параметр, выберите вкладку Parameters).
Выберите класс памяти для элемента данных. Чтобы применить настройку по умолчанию, выберите класс памяти Model default
.
В Property Inspector сконфигурируйте свойства для того класса памяти. (Например, заголовок и файлы определения).
Для получения дополнительной информации см. Настройка генерации кода C для элементов интерфейса моделиНастройка генерации кода C для элементов интерфейса модели (Embedded Coder).
Сконфигурируйте внешние объекты данных для генерации кода при помощи редактора Отображений Кода или Model Explorer. Выберите объект данных в панели Contents. Затем в панели Dialog, на вкладке Code Generation, выбирают класс памяти и устанавливают свойства для того класса памяти. Для удобства можно также сконфигурировать внешние объекты данных в редакторе Отображений Кода. Чтобы просмотреть и сконфигурировать эти объекты, в редакторе, щелкают по ссылке Refresh справа от названия категории.
Можно сконфигурировать программно внешние объекты данных. Например, чтобы сконфигурировать Simulink.Parameter
объект для генерации кода путем применения класса памяти ExportedGlobal
, можно использовать код, похожий на:
P = Simulink.Parameter; P.Value = 5; P.DataType = 'int32'; P.CoderInfo.StorageClass = 'ExportedGlobal';
Чтобы применить класс памяти от пакета класса памяти кроме Simulink (такого как пакет, который вы создаете):
Откройте приложение Embedded Coder.
Откройте Словарь Embedded Coder. На вкладке C Code выберите Code Interface> Embedded Coder Dictionary.
В Словаре Embedded Coder нажмите кнопку Manage Packages.
В диалоговом окне Manage Packages выберите пакет. Если пакет интереса не находится в списке, нажмите Refresh. Затем выберите свой пакет.
Закройте словарь Embedded Coder.
Нажмите Load.
Используйте API отображений редактора или кода Отображений Кода, чтобы сконфигурировать интерфейсные элементы модели.
Для получения дополнительной информации смотрите Embedded Coder Dictionary (Embedded Coder), Code Mappings editor и coder.mapping.api.CodeMapping
(Embedded Coder).
Применять класс памяти при помощи объекта данных (обязательные параметры), вместо того, чтобы создать Simulink.Signal
или Simulink.Parameter
возразите, создайте myPackage.Signal
или myPackage.Parameter
объект. Чтобы создать объекты данных из вашего пакета, смотрите, Создают Объекты данных из Другого Пакета Класса Данных. Для примера, который показывает, как создать и применить ваш собственный класс памяти, смотрите, Создают и Применяют Класс памяти (Embedded Coder).
Редактор Отображений кода | coder.mapping.api.CodeMapping