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