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