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

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

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

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

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

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

  • model является именем модели.

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

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

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

| |

Похожие темы