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

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

Возможности данных и файл заголовка

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

  • 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_<reservedrangesplaceholder0 >_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_<reservedrangesplaceholder0 >_ для каждого 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

См. также

| |

Похожие темы