Созданный код может создавать стандартные переменные глобальной структуры, поля которых представляют данные сигнала, состояния и параметра в модели. С помощью классов хранения можно настроить отображение данных в коде в виде отдельных глобальных переменных или пользовательских глобальных структур. Сведения о стандартных структурах данных см. в разделах Как сгенерированный код хранит внутренний сигнал, состояние и данные параметров и Как сгенерированный код обменивается данными с средой. Сведения о классах хранения см. в разделе Выбор класса хранения для представления управляющих данных в сгенерированном коде.
Можно управлять размещением файлов определений и объявлений переменных. Используйте информацию в таблице.
Цель | Детали и методы |
---|---|
Создание переменной, которую может использовать внешний код | Применение класса хранения с экспортированной областью данных, например Для создания Кроме того, чтобы поместить объявление в файл, имя которого можно указать, выберите один из следующих способов:
См. раздел Обмен данными между внешним кодом вызывающего абонента и сгенерированным кодом. |
Создание кода, использующего переменную, определенную внешним кодом | Применение класса хранения с импортированной областью данных, например Кроме того, если отсутствует файл заголовка внешнего объявления или не требуется, чтобы созданный код включал файл заголовка, примените класс хранения. См. раздел Обмен данными между внешним кодом вызывающего абонента и сгенерированным кодом. |
| В зависимости от параметров конфигурации > Формат упаковки файлов, созданные файлы, такие как
|
Объединение нескольких файлов в один файл |
|
Отделить определения данных от определений функций | По умолчанию созданный файл, определяющий функции точки входа для модели или подсистемы, также определяет данные для этой модели или подсистемы. При частом внесении изменений в данные, особенно в исходные значения настраиваемых параметров, изменение файлов исходного кода может затруднить проверку и управление изменениями. Для отделения данных от функций:
|
Изоляция определений данных в отдельных файлах для разработки моделей на основе компонентов и групп | См. раздел Организация данных для поддержки разработки модели на основе компонентов, ориентированной на коллектив. |
Агрегатные определения параметров управления вариантами (#define макросы) в один файл заголовка | Как описано в разделе Создание условий препроцессора для исполнительных систем, параметр управления исполнениями является объектом параметра, таким как
|
В зависимости от конфигурации модели определения данных могут отображаться в больших созданных файлах. В системе компонентов (подсистем или ссылочных моделей) можно разделить и упорядочить определения данных в управляемые осмысленные файлы на основе иерархии компонентов.
Цель | Техника |
---|---|
Установить принадлежность глобальных данных путем размещения определений данных с кодом, созданным для определенных компонентов | При разделении системы на компоненты с использованием ссылочных моделей и атомных подсистем глобальные данные по умолчанию обычно определяются кодом, сгенерированным для верхнего компонента иерархии. Глобальные данные включают параметры, сигналы и состояния, к которым применяются классы хранения (см. Конфигурация генерации кода C для элементов интерфейса модели). Вместо этого можно разместить определения глобальных данных с другими компонентами в иерархии. Пример использования ссылочных моделей см. в разделе Установление владения данными в иерархии моделей.
|
Для атомной подсистемы разместите стандартные структуры данных для подсистемы с кодом подсистемы. | По умолчанию стандартные структуры данных для атомной подсистемы отображаются как подструктуры структур данных для всей модели. Чтобы создать отдельные структуры данных для подсистемы, выберите функцию с отдельным параметром данных в блоке подсистемы. Затем данные подсистемы отображаются в отдельных структурных переменных, определяемых кодом подсистемы. См. раздел Создание кода модульной функции для невиртуальных подсистем. |
При создании данных в модели путем добавления блоков и сигнальных линий определения данных по умолчанию отображаются в
. Чтобы задать другое размещение по умолчанию, используйте следующие инструменты и параметры:model
.c
Параметр конфигурации модели Формат упаковки файлов. Выбранная настройка определяет, помещает ли генератор кода стандартные структуры, хранящие настраиваемые и постоянные данные параметров в
вместо model
_data.c
. См. раздел Формат упаковки файлов.model
.c
Редактор сопоставлений кода. Для каждой категории данных модели можно указать класс хранения по умолчанию, который управляет размещением файлов. Например, примените класс хранения ExportToFile
к категории данных и в Инспекторе свойств для управления размещением файлов используйте свойства DefinityFile, HeeyFile и Owner.
Параметры конфигурации модели Определение данных и Объявление данных. Эти параметры конфигурации определяют размещение файлов по умолчанию для элементов данных, к которым применяются классы хранения.
Эти параметры конфигурации не влияют на элементы данных, к которым применяются эти классы хранения:
ExportedGlobal
ImportedExtern
ImportedExternPointer
BitField
FileScope
Localizable
Struct
CompilerFlag
В словаре Embedded Coder ® значение Header File для неподдерживаемых классов хранения пусто. Нельзя указать размещение файлов по умолчанию для неподдерживаемых классов хранения.
Если применяется класс хранения, явно указывающий файлы определений и объявлений для элемента данных, эти спецификации переопределяют параметры конфигурации определения данных и объявления данных.
Дополнительные сведения см. в разделах Определение данных и Объявление данных.
Параметр блока подсистемы Function с отдельными данными. При выборе этого параметра стандартные структуры, хранящие данные подсистемы, такие как структура DWork, отображаются как отдельные структурные переменные. По умолчанию определения переменных отображаются в исходном файле, определяющем функцию выполнения подсистемы. См. раздел Создание кода модульной функции для невиртуальных подсистем.
Для отдельного элемента данных, чтобы переопределить размещение файлов по умолчанию, используйте редактор сопоставления кодов для непосредственного применения класса хранения. Например, чтобы элемент данных появился в сгенерированном коде как глобальная переменная, примените класс хранения ExportToFile
. Затем используйте свойства Файл определения (Definition file) и Файл заголовка (Header file) для управления размещением файла. Сведения о непосредственном применении классов хранения см. в разделе Организация данных параметров в структуру с использованием класса хранения Struct.
static
Применение ключевого слова C static
к глобальной переменной, которая поможет избежать конфликтов имен, ограничив область имени переменной файлом, определяющим переменную, выберите один из следующих способов:
Применение встроенного класса хранения FileScope
. Дополнительные сведения см. в разделе Выбор класса хранения для представления управляющих данных в сгенерированном коде.
Если FileScope
не соответствует вашим требованиям, создайте собственный класс хранения с помощью конструктора пользовательских классов хранения. В конструкторе задайте для области данных значение File
или Auto
.
С File
, элемент данных отображается в коде как static
глобальная переменная.
С Auto
, генератор кода сначала пытается представить элемент данных с локальной переменной в функции. Если эта попытка завершается неуспешно, генератор кода использует static
глобальная переменная.
Пример создания собственного класса хранения с помощью конструктора см. в разделе Создание и применение класса хранения.
Вы не можете применить static
к стандартным структурам данных, таким как структура DWork.
К доступу static
данные, вы можете настроить сгенерированный код, чтобы включить интерфейс, такой как a2l
(ASAP2) файл. Дополнительные сведения см. в разделе Экспорт файла ASAP2 для измерения и калибровки данных. Чтобы поместить данные в определенное место памяти, включив в созданный код прагматики или другие украшения, создайте собственный раздел памяти и класс хранения. См. раздел Управление данными и размещением функций в памяти путем вставки прагматиков.
Можно создать объект параметра (например, Simulink.Parameter
) в базовой рабочей области, рабочей области модели или словаре данных. Однако при применении класса хранения к объекту расположение объекта может повлиять на размещение файла соответствующего определения данных в созданном коде. См. раздел Влияние склада на создание кода для объектов параметров.
#include
Синтаксис для файлов заголовков данныхДля управления размещением файла элемента данных, такого как сигнальная линия или состояние блока, в сгенерированном коде можно применить класс хранения к элементу данных (см. раздел Организация данных параметров в структуру с помощью класса Struct Storage). Затем с помощью свойства Header file можно указать созданный или внешний файл заголовка, содержащий объявление данных.
Чтобы уменьшить затраты на обслуживание и ввод данных, при указании Header file можно опустить разделители ("
или <>
) и используйте только имя файла. Затем можно управлять разделителями по умолчанию, используемыми сгенерированным кодом для соответствующего #include
директивы. Чтобы использовать угловые скобки по умолчанию, задайте для параметров конфигурации > Создание кода > Размещение кода > # включить разделители файлов значение#include <header.h>
.