По умолчанию, когда вы используете объекты типа данных, такие как Simulink.AliasType
и Simulink.Bus
и пользовательские перечисления, чтобы задать типы данных для сигналов и параметров блоков, код, сгенерированный из модели, задает типы (например, с операторами typedef
). Чтобы упростить интегрирование сгенерированного кода с другим существующим кодом и построить сгенерированный код из модулей, можно управлять размещением файла определений типа путем корректировки свойств объектов и перечислений.
Чтобы управлять размещением файла пользовательского определения типа в сгенерированном коде, установите свойства DataScope
и HeaderFile
объекта типа данных согласно таблице. Точно так же для перечисления, которое вы задаете в файле MATLAB®, установите возвращаемые аргументы методов getHeaderFile
и getDataScope
.
является именем пользовательского типа данных.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_filename_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_typename_
typedef
. Предположим, что вы используете объект Simulink.AliasType
mySingleAlias
с этими свойствами:
Набор DataScope
к Auto
HeaderFile
, не заданный
Когда вы генерируете код, файл
содержит защищенный оператор , model_types.h
typedef
:
#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_ #define _DEFINED_TYPEDEF_FOR_mySingleAlias_ typedef real32_T mySingleAlias; #endif
Simulink.AliasType
| Simulink.Bus
| Simulink.NumericType