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