exponenta event banner

Управление размещением определений и деклараций глобальных данных в созданных файлах

Созданный код может создавать стандартные переменные глобальной структуры, поля которых представляют данные сигнала, состояния и параметра в модели. С помощью классов хранения можно настроить отображение данных в коде в виде отдельных глобальных переменных или пользовательских глобальных структур. Сведения о стандартных структурах данных см. в разделах Как сгенерированный код хранит внутренний сигнал, состояние и данные параметров и Как сгенерированный код обменивается данными с средой. Сведения о классах хранения см. в разделе Выбор класса хранения для представления управляющих данных в сгенерированном коде.

Можно управлять размещением файлов определений и объявлений переменных. Используйте информацию в таблице.

ЦельДетали и методы
Создание переменной, которую может использовать внешний код

Применение класса хранения с экспортированной областью данных, например ExportToFile. Созданный код объявляет переменную в файле, который может включать код (#include).

Для создания extern объявление в model.h, рассмотрите возможность использования класса хранения ExportedGlobal.

Кроме того, чтобы поместить объявление в файл, имя которого можно указать, выберите один из следующих способов:

  • Для объединения нескольких объявлений переменных в один или несколько файлов заголовка по умолчанию примените класс хранения, например ExportToFile в категорию данных с помощью редактора сопоставлений кодов. При добавлении блоков и сигналов в модель новые элементы данных объявляются в указанных файлах.

  • Чтобы явно указать размещение для отдельного элемента данных, непосредственно примените класс хранения, такой как ExportToFile и укажите имя файла заголовка с помощью свойства Header file.

См. раздел Обмен данными между внешним кодом вызывающего абонента и сгенерированным кодом.

Создание кода, использующего переменную, определенную внешним кодом

Применение класса хранения с импортированной областью данных, например ImportFromFile, к элементу данных в модели, который представляет переменную. Затем сгенерированный код не определяет переменную, а вместо этого включает (#include) внешний файл заголовка, имя которого можно указать. Сгенерированный алгоритм (например, модель step функция) считывает и записывает в переменную.

Кроме того, если отсутствует файл заголовка внешнего объявления или не требуется, чтобы созданный код включал файл заголовка, примените класс хранения. ImportedExtern. Затем созданный код объявляет переменную в model_private.h.

См. раздел Обмен данными между внешним кодом вызывающего абонента и сгенерированным кодом.

  • Уменьшите размер созданного файла, создав несколько файлов меньшего размера

  • Организация данных в различные файлы для упрощения понимания сгенерированного кода

В зависимости от параметров конфигурации > Формат упаковки файлов, созданные файлы, такие как model.c и model_data.c может содержать множество определений глобальных переменных. Соответствующие заголовочные файлы могут содержать множество объявлений.

  • Сделать model.c меньше, рассмотрите возможность установки для формата упаковки файлов значения Modular или Compact (with separate data file). Затем созданный код определяет стандартные структуры, которые представляют настраиваемые и постоянные данные параметров в model_data.c вместо model.c.

  • Чтобы поместить различные категории данных (например, внешние параметры, состояния блоков и внутренние сигналы) в определенные файлы по умолчанию, используйте редактор сопоставлений кода. Для каждой категории данных используйте класс хранения, например ExportToFile и укажите свойство Header file. См. раздел Настройка генерации кода по умолчанию для данных.

  • Для точного контроля над размещением файлов данных примените такие классы хранения, как ExportToFile отдельным элементам данных. Используйте свойства класса хранения, такие как Файл определения (Definition file) и Файл заголовка (Header file), чтобы указать размещение файлов для каждого элемента данных. Пример см. в разделе Определение и объявление сигнальных данных.

Объединение нескольких файлов в один файл

  • Рассмотрите возможность установки для параметра конфигурации модели Формат упаковки файлов значения Compact. Затем генератор кода не создает model_data.c файл. Вместо этого определения стандартных структур, в которых хранятся настраиваемые и постоянные данные параметров, отображаются в model.c.

  • При применении класса хранения, например ExportToFile для элементов данных оставьте пустыми свойства Definition file и Header file, значение по умолчанию. Также задайте для параметра конфигурации модели Data definition значение Data defined in source file. Затем определения данных появляются в model.c с определениями других глобальных данных.

Отделить определения данных от определений функций

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

  • Рассмотрите возможность установки для параметра конфигурации модели Формат упаковки файлов значения, которое приведет к созданию отдельного файла данных model_data.c. Затем определения стандартных структур, хранящих настраиваемые и постоянные данные параметров, появляются в этом файле, а не в model.c.

  • Применение классов хранения, таких как ExportToFile к элементам данных с помощью редактора сопоставлений кодов. Используйте свойства класса хранения, такие как Файл определения (Definition file) и Файл заголовка (Header file), чтобы указать размещение файла. Дополнительные сведения см. в разделе Настройка генерации кода по умолчанию для данных и организация данных параметров в структуру с помощью класса Struct Storage.

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

См. раздел Организация данных для поддержки разработки модели на основе компонентов, ориентированной на коллектив.

Агрегатные определения параметров управления вариантами (#define макросы) в один файл заголовка

Как описано в разделе Создание условий препроцессора для исполнительных систем, параметр управления исполнениями является объектом параметра, таким как Simulink.Parameter. Применяется класс хранения, который делает объект отображаемым в созданном коде в качестве макроса. Для управления размещением файлов выберите один из следующих способов:

  • Для каждого параметра управления вариантами, использующего класс хранения Defineустановите для свойства Header file то же значение. Чтобы настроить эти объекты в списке, который можно искать, сортировать и фильтровать, можно использовать вкладку Параметры редактора данных модели (Model Data Editor Parameters). Пример см. в разделе Создание макросов управления вариантами в одном и том же файле заголовка.

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

Организация данных для поддержки разработки модели на основе компонентов, ориентированной на группы

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

ЦельТехника

Установить принадлежность глобальных данных путем размещения определений данных с кодом, созданным для определенных компонентов

При разделении системы на компоненты с использованием ссылочных моделей и атомных подсистем глобальные данные по умолчанию обычно определяются кодом, сгенерированным для верхнего компонента иерархии. Глобальные данные включают параметры, сигналы и состояния, к которым применяются классы хранения (см. Конфигурация генерации кода C для элементов интерфейса модели).

Вместо этого можно разместить определения глобальных данных с другими компонентами в иерархии. Пример использования ссылочных моделей см. в разделе Установление владения данными в иерархии моделей.

  • Чтобы поместить определение данных с кодом, созданным для ссылочной модели, используйте встроенный класс хранения, например ExportToFileили класс хранения, создаваемый в пакете и устанавливающий для свойства Owner имя ссылочной модели.

    Чтобы использовать владельца в модели, необходимо выбрать параметр конфигурации модели Использовать владельца из объекта данных для размещения определения данных. Значение по умолчанию для этого параметра, снятое, означает, что генератор кода игнорирует значение, указанное для параметра «Владелец».

    Если только одна ссылочная модель использует объект параметра, рассмотрите возможность сохранения объекта в рабочем пространстве модели этой модели. Затем код, созданный для этой модели, определяет данные. Не требуется указывать владельца (владельца) для объекта.

  • В атомной подсистеме используйте класс хранения, такой как ExportToFile и явно укажите имя файла определения с помощью свойства Файл определения. Однако невозможно поместить файл определения в исходные файлы, принадлежащие подсистеме. Вместо этого указанный файл определения появляется в папке, созданной для модели.

Для атомной подсистемы разместите стандартные структуры данных для подсистемы с кодом подсистемы.

По умолчанию стандартные структуры данных для атомной подсистемы отображаются как подструктуры структур данных для всей модели.

Чтобы создать отдельные структуры данных для подсистемы, выберите функцию с отдельным параметром данных в блоке подсистемы. Затем данные подсистемы отображаются в отдельных структурных переменных, определяемых кодом подсистемы. См. раздел Создание кода модульной функции для невиртуальных подсистем.

Задать размещение по умолчанию

При создании данных в модели путем добавления блоков и сигнальных линий определения данных по умолчанию отображаются в 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>.

Связанные темы