По умолчанию, когда вы используете объекты типа данных, такие как Simulink.AliasType и Simulink.Bus, и пользовательские перечисления для задания типов данных для сигналов и параметров блоков, код, сгенерированный из модели, определяет типы (для примера, с typedef операторы). Чтобы облегчить интегрирование сгенерированного кода с другим существующим кодом и модуляризировать сгенерированный код, можно управлять размещением файлов определений типов путем корректировки свойств объектов и перечислений.
Чтобы контролировать размещение файлов пользовательского определения типа в сгенерированном коде, установите DataScope и HeaderFile свойства объекта типа данных в соответствии с таблицей. Точно так же для перечисления, которое вы задаете в MATLAB® файл установите возвращаемые аргументы getDataScope и getHeaderFile методы.
- имя пользовательского типа данных.typename
- имя файла заголовка.filename
- имя модели.model
| Цель | Задайте DataScope как | Задайте HeaderFile как |
|---|---|---|
Экспорт определения типа в | Auto | Пустой |
Импортируйте определение типа из созданного файла заголовка, | Auto или Imported | (при необходимости включите .h расширение) |
Экспорт определения типа в сгенерированный заголовочный файл, | Exported | или |
Экспорт определения типа в сгенерированный заголовочный файл, | Exported | Пустой |
Когда вы импортируете определение типов (для примера, путем установки DataScope на Imported), сгенерированный код модели создает #include директива для заголовочного файла вместо определения типа. Вы предоставляете заголовочный файл, содержащий определение.
Если вы используете замену типа данных для замены встроенного Simulink® тип данных с собственным типом данных в сгенерированном коде (см. «Параметры конфигурации модели: замена типа данных генерации кода»), typedef операторы и #include директивы появляются в rtwtypes.h вместо .model_types.h
Когда Simulink.AliasType или Simulink.NumericType объект участвует в замене типов данных, вы не можете задать DataScope свойство объекта, которое должно быть Exported. Поэтому, если вы хотите, чтобы генератор кода сгенерировал соответствующую typedef оператор, вы не можете управлять размещением файла оператора. Однако можно задать DataScope на Imported, что означает, что вы можете сконфигурировать код, чтобы повторно использовать typedef оператор, который предоставляет внешний код.
В качестве обходного пути вместо использования объекта типа данных в качестве замены типа данных используйте объект, чтобы задать типы данных отдельных элементов данных в модели. Чтобы сконфигурировать много элементов данных, можно использовать Model Data Editor и использовать преимущества распространения и наследования типов данных. Для получения дополнительной информации см. «Управляющие имена примитивных типов данных».
Можно использовать Simulink.AliasType объект с численно комплексными данными (i). В этом случае, если вы конфигурируете сгенерированный код, чтобы импортировать определение типа из вашего внешнего кода (для примера, путем установки DataScope свойство к Imported), ваш код должен содержать два дополнительных typedef операторы.
Предположим, ваш внешний заголовочный файл myAliasTypes.h определяет тип данных IAT_int32 как псевдоним 32-битного целого числа. Файл должен определять два типа: IAT_int32 и cIAT_int32:
#ifndef myAliasTypes_H_ #define myAliasTypes_H_ #include "rtwtypes.h" typedef int32_T IAT_int32; typedef cint32_T cIAT_int32; #endif
Вам не нужно создавать две Simulink.AliasType объекты. В этом примере вы создаете один объект, IAT_int32. Сгенерированный код затем создает комплексные данные (переменные) с помощью обоих IAT_int32 и cIAT_int32.
При экспорте одного или нескольких определений типов данных в сгенерированный заголовочный файл файл содержит защиту макросов на уровне файлов формы . RTW_HEADER_<reservedrangesplaceholder0 >_h
Предположим, что вы используете несколько Simulink.AliasType объекты: mySingleAlias, myDoubleAlias, и myIntAlias со следующими свойствами:
DataScope установлено на Exported
HeaderFile установлено на myTypes.h
Когда вы генерируете код, защищенный файл myTypes.h содержит typedef операторы:
#ifndef RTW_HEADER_myTypes_h_ #define RTW_HEADER_myTypes_h_ #include "rtwtypes.h" typedef real_T myDoubleAlias; typedef real32_T mySingleAlias; typedef int16_T myIntAlias; #endif
При экспорте определений типов данных в файл содержит защиту макросов формы model_types.h для каждого _DEFINED_TYPEDEF_FOR_<reservedrangesplaceholder0 >_typedef оператор. Предположим, что вы используете Simulink.AliasType mySingleAlias объекта со следующими свойствами:
DataScope установлено на Auto
HeaderFile не задан
Когда вы генерируете код, файл содержит охраняемые model_types.htypedef оператор:
#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_ #define _DEFINED_TYPEDEF_FOR_mySingleAlias_ typedef real32_T mySingleAlias; #endif
Simulink.AliasType | Simulink.Bus | Simulink.NumericType