Сгенерированный код может создать стандарт, глобальные переменные структуры, поля которых представляют сигнал, состояние и данные о параметре в модели. С классами памяти можно сконфигурировать данные, чтобы появиться в коде как отдельные глобальные переменные или пользовательские глобальные структуры. Для получения информации о стандартных структурах данных смотрите, Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре и Как Сгенерированный код Обменивается Данными со Средой. Для получения информации о классах памяти смотрите, Выбирают 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>
.