Управляйте размещением файла пользовательских типов данных

По умолчанию, когда вы используете объекты типа данных, такие как Simulink.AliasType и Simulink.Bus, и пользовательские перечисления, чтобы задать типы данных для сигналов и параметров блоков, код, сгенерированный из модели, задают типы (например, с typedef операторы). Чтобы упростить интегрирование сгенерированного кода с другим существующим кодом и построить сгенерированный код из модулей, можно управлять размещением файла определений типа путем корректировки свойств объектов и перечислений.

Осциллограф данных и заголовочный файл

Чтобы управлять размещением файла пользовательского определения типа в сгенерированном коде, установите DataScope и HeaderFile свойства типа данных возражают согласно таблице. Точно так же для перечисления, которое вы задаете в файле MATLAB®, установите возвращаемые аргументы getDataScope и getHeaderFile методы.

  • typename имя пользовательского типа данных.

  • filename имя заголовочного файла.

  • model имя модели.

ЦельЗадайте DataScope какЗадайте HeaderFile как
Экспортируйте определение типа model_types.hAutoПустой
Импортируйте определение типа из заголовочного файла, который вы создаете, filenameAuto или Importedfilename (при необходимости включайте .h расширение
Экспортируйте определение типа сгенерированному заголовочному файлу, filenameHExportedfilename или filenameH
Экспортируйте определение типа сгенерированному заголовочному файлу, typenameHExportedПустой

Когда вы импортируете определение типов (например, установкой 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.h содержит защищенный typedef оператор:

#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_
#define _DEFINED_TYPEDEF_FOR_mySingleAlias_

typedef real32_T mySingleAlias;

#endif

Смотрите также

| |

Похожие темы