По умолчанию, когда вы используете объекты типа данных, такие как 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_
. 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.htypedef
оператор:
#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_ #define _DEFINED_TYPEDEF_FOR_mySingleAlias_ typedef real32_T mySingleAlias; #endif
Simulink.AliasType
| Simulink.NumericType
| Simulink.Bus