Сгенерированный код может создать стандарт, глобальные переменные структуры, поля которых представляют сигнал, состояние и данные о параметре в модели. С классами памяти можно сконфигурировать данные, чтобы появиться в коде как отдельные глобальные переменные или пользовательские глобальные структуры. Для получения информации о стандартных структурах данных смотрите, Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре и Как Сгенерированный код Обменивается Данными со Средой. Для получения информации о классах памяти смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Можно управлять размещением файла определений переменной и объявлений. Используйте информацию в таблице.
Цель | Детали и методы |
---|---|
Сгенерируйте переменную, которую может использовать внешний код | Примените класс памяти с экспортируемым осциллографом данных, таким как Чтобы сгенерировать объявление Также, чтобы поместить объявление в файл, имя которого можно задать, выберите один из этих методов:
Смотрите обмениваются данными между внешним кодом вызова и сгенерированным кодом. |
Сгенерируйте код, который использует переменную, заданную внешним кодом | Примените класс памяти с импортированным осциллографом данных, таким как Также, если вы не имеете заголовочного файла внешнего объявления или не хотите, чтобы сгенерированный код включал заголовочный файл, применил класс памяти Смотрите обмениваются данными между внешним кодом вызова и сгенерированным кодом. |
| В зависимости от установки Configuration Parameters> File packaging format, сгенерированные файлы, такие как
|
Объедините несколько файлов в один файл |
|
Отдельные определения данных из функциональных определений | По умолчанию сгенерированный файл, который задает функции точки входа для модели или подсистемы также, задает данные для той модели или подсистемы. Когда вы часто вносите изменения в данные, особенно начальные значения для настраиваемых параметров, изменяющиеся файлы исходного кода могут препятствовать верификации и сделать управление изменениями более трудным. Разделить данные из функций:
|
Изолированные определения данных в отдельных файлах для компонентно-ориентированной, ориентированной командой разработки моделей | |
Совокупные определения различных параметров управления (макросы #define ) в один заголовочный файл | Как описано в Генерируют Условные выражения Препроцессора для Вариантных систем, различный параметр управления является объектом параметра, таким как
|
В зависимости от вашей настройки модели определения данных могут казаться агрегированными в больших сгенерированных файлах. В системе компонентов (подсистемы или модели, на которые ссылаются), можно разделить и организовать определения данных в управляемые, значимые файлы на основе иерархии компонентов.
Цель | Метод |
---|---|
Установите владение глобальных данных путем размещения определений данных с кодом, сгенерированным для определенных компонентов | Когда вы делите систему на компоненты при помощи моделей, на которые ссылаются, и атомарных подсистем, по умолчанию, глобальные данные обычно задаются кодом, сгенерированным для главного компонента в иерархии. Глобальные данные включают параметры, сигналы, и утверждают, к которому вы применяете классы памяти (см., Применяют Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра). Вместо этого можно поместить определения глобальных данных с другими компонентами в иерархии. Для примера, включающего модели, на которые ссылаются, смотрите, Устанавливают Владение Данных в Системе Компонентов.
|
Для атомарной подсистемы поместите стандартные структуры данных для подсистемы с кодом подсистемы | По умолчанию стандартные структуры данных для атомарной подсистемы появляются как подструктуры структур данных для целой модели. Чтобы сгенерировать отдельные структуры данных для подсистемы, выберите параметр Function with separate data в блоке подсистемы. Затем данные о подсистеме появляются в отдельных переменных структуры, которые задает код подсистемы. Смотрите Генерируют Модульный Функциональный Код для Невиртуальных Подсистем. |
Когда вы создаете данные в модели путем добавления блоков и сигнальных линий, по умолчанию, определения данных появляются в
. Чтобы задать различное размещение по умолчанию, используйте эти инструменты и параметры:model.c
Образцовый параметр конфигурации File packaging format. Установка, которую вы выбираете, определяет, помещает ли генератор кода стандартные структуры, которые хранят настраиваемые и постоянные данные о параметре в
вместо model_data.c
. Смотрите, что Файл группирует формат.model.c
Код, Сопоставляющий Редактор. Для каждой категории данных модели можно задать класс памяти по умолчанию, который управляет размещением файла. Например, примените класс памяти ExportToFile
к категории данных и, в Property Inspector, используйте DefinitionFile, HeaderFile и пользовательские атрибуты Owner, чтобы управлять размещением файла.
Образцовые параметры конфигурации Data definition и Data declaration. Эти параметры конфигурации задают размещение файла по умолчанию для элементов данных, к которым вы применяете классы памяти.
Эти параметры конфигурации не влияют на элементы данных, к которым вы применяете классы памяти ExportedGlobal
, ImportedExtern
и ImportedExternPointer
.
Если вы применяете класс памяти, который явным образом задает определение и файлы объявления для элемента данных, те спецификации заменяют параметры конфигурации Data declaration и Data definition.
Для получения дополнительной информации смотрите Определение данных и Объявление данных.
Параметры блоков подсистемы Function with separate data. Когда вы выбираете этот параметр, стандартные структуры, которые хранят данные о подсистеме, такие как структура DWork, появляются как отдельные переменные структуры. По умолчанию определения переменной появляются в исходном файле, который задает функцию выполнения подсистемы. Смотрите Генерируют Модульный Функциональный Код для Невиртуальных Подсистем.
Для отдельного элемента данных, чтобы заменить размещение файла по умолчанию, используют Model Data Editor, чтобы применить класс памяти непосредственно. Например, чтобы заставить элемент данных появиться в сгенерированном коде как глобальная переменная, примените пользовательский класс памяти ExportToFile
. Затем используйте Definition file, пользовательские атрибуты Header file, чтобы управлять размещением файла. Чтобы применить классы памяти непосредственно, смотрите, Применяют Пользовательские Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра.
static
Чтобы применить ключевое слово C static
к глобальной переменной, которая может помочь вам избежать столкновений имени путем ограничения осциллографа имени переменной к файлу, который задает переменную, выберите один из этих методов:
Примените встроенный класс памяти FileScope
. Для получения дополнительной информации смотрите, Выбирают Storage Class for Controlling Data Representation in Generated Code.
Если FileScope
не удовлетворяет ваши требования, создайте свой собственный класс памяти при помощи Custom Storage Class Designer. В Разработчике, набор Data scope к File
или Auto
.
С File
элемент данных появляется в коде как глобальная переменная static
.
С Auto
генератор кода сначала пытается представлять элемент данных с локальной переменной в функции. Если эта попытка перестала работать, генератор кода использует глобальную переменную static
.
Для примера, который показывает, как создать ваш собственный класс памяти при помощи Разработчика, смотрите, Создают и Применяют Пользовательский Класс памяти.
Вы не можете применить static
к стандартным структурам данных, таким как структура DWork.
Чтобы получить доступ к данным static
, можно сконфигурировать сгенерированный код, чтобы включать интерфейс, такой как a2l
(ASAP2) файл. Для получения дополнительной информации смотрите Экспорт Файл ASAP2 для Измерения Данных и Калибровки. Чтобы поместить данные в определенную ячейку памяти включением прагм или других художественных оформлений в сгенерированном коде, создайте свой собственный раздел memory и пользовательский класс памяти. Смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.
Можно создать объект параметра (такой как Simulink.Parameter
) в базовом рабочем пространстве, рабочем пространстве модели или словаре данных. Однако, когда вы применяете класс памяти или пользовательский класс памяти к объекту, местоположение объекта может повлиять на размещение файла соответствующего определения данных в сгенерированном коде. Смотрите Влияние Генерации кода Места хранения для Объектов параметра.
#include
для заголовочных файлов данныхЧтобы управлять размещением файла элемента данных, такого как сигнальная линия или состояние блока, в сгенерированном коде, можно применить класс памяти к элементу данных (см., Применяют Пользовательские Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра). Вы затем используете пользовательский атрибут Header file, чтобы задать сгенерированный или внешний заголовочный файл, который содержит объявление данных.
Чтобы уменьшать усилие по обслуживанию и ввод данных, когда вы задаете Header file, можно не использовать разделители ("
или <>
) и использовать только имя файла. Можно затем управлять разделителями по умолчанию, которые сгенерированный код использует для соответствующих директив #include
. Чтобы использовать угловые скобки по умолчанию, установите Configuration Parameters> Code Generation> Code Placement> #include file delimiters к #include <header.h>
.