Simulink.importExternalCTypes

Сгенерируйте представления Simulink пользовательских типов данных, заданных C или Кодом С++

Синтаксис

importInfo = Simulink.importExternalCTypes(headerFiles)
importInfo = Simulink.importExternalCTypes(modelName)
importInfo = Simulink.importExternalCTypes(___,Name,Value)

Описание

пример

importInfo = Simulink.importExternalCTypes(headerFiles) анализирует C или заголовочные файлы C++ (.h или .hpp) идентифицированный headerFiles для typedef, struct и определений типа enum, и генерирует представления Simulink® типов. Вывод, importInfo, идентифицирует успешно и неудачно импортированные типы.

Можно использовать представления Simulink:

По умолчанию, функция:

  • Импортирует перечислимый тип путем генерации файла скрипта, который выводит класс перечисления от Simulink.IntEnumType, как описано в Задают Перечисления Simulink. При необходимости можно затем отредактировать определение класса, чтобы настроить его (например, путем реализации метода addClassNameToEnumNames).

  • Импортирует тип структуры путем генерации объекта Simulink.Bus в базовом рабочем пространстве.

  • Импортирует примитивный оператор typedef путем генерации объекта Simulink.AliasType в базовом рабочем пространстве.

  • Интерпретирует типичные типы данных C, такие как int или short, согласно размерам слова вашего хоста - компьютера. Например, для большинства современных машин, int имеет 32-битный размер слова, таким образом, функция представляет поле структуры int как элемент шины, который использует тип данных Simulink int32.

    Чтобы заменить это поведение по умолчанию, идентифицируйте свою плату целевого компьютера при помощи аргумента пары HardwareImplementation.

Для получения дополнительной информации о поведении по умолчанию смотрите Советы.

пример

importInfo = Simulink.importExternalCTypes(modelName) генерирует представления Simulink пользовательских типов данных C путем анализа модели, которую вы идентифицируете с modelName. Когда вы будете использовать Целевые параметры конфигурации Моделирования в модели, чтобы идентифицировать заголовочные файлы для включения во время моделирования, используйте этот синтаксис, чтобы импортировать типы в целях моделирования модели на вашем хосте - компьютере. Функция интерпретирует типичные типы данных C согласно размерам слова вашего хоста - компьютера.

Когда вы используете этот синтаксис, не используйте парные аргументы, такие как HardwareImplementation, который может конфликтовать с параметрами конфигурации целевой модели. Когда вы используете такие парные аргументы с этим синтаксисом, функция генерирует предупреждение.

пример

importInfo = Simulink.importExternalCTypes(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов в виде пар "имя-значение". Можно использовать этот синтаксис для:

  • Задайте имена типов, чтобы импортировать при помощи аргумента пары Names.

  • Управляйте способом, которым Simulink хранит импортированные типы, например, путем генерации типов в словаре данных Simulink. Используйте MATFile и аргументы пары DataDictionary.

  • Управляйте способом, которым функция интерпретирует типичные типы данных C. Используйте аргумент пары HardwareImplementation.

  • Поддержите синхронию между определениями кода С и представлениями Simulink путем попытки импортировать обновленные определения кода С снова. Можно выбрать, перезаписать ли существующие представления Simulink. Используйте Overwrite и аргументы пары Verbose.

Примеры

свернуть все

Этот пример показывает, как сгенерировать представления Simulink типа структуры C (struct) и перечислимое (enum) тип данных от заголовочного файла.

  1. В вашей текущей папке создайте файл ex_cc_simpleTypes.h h.

    typedef enum {
      PWR_LOSS = 0,                 /* Default value */
      OVERSPD,
      PRESS_LOW,
    } fault_T;
    
    typedef struct {
        double coeff;
        double init;
    } params_T;

  2. Сгенерируйте представления Simulink типов путем вызова Simulink.importExternalCTypes.

    Simulink.importExternalCTypes('ex_cc_simpleTypes.h');

    Функция создает объект Simulink.Bus, params_T, в базовом рабочем пространстве.

  3. Чтобы осмотреть свойства объекта, откройте Редактор Шины.

    buseditor

    Каждый элемент шины использует имя и тип данных (double), которые совпадают с соответствующим полем структуры в ex_cc_simpleTypes.h h.

  4. В вашей текущей папке осмотрите сгенерированный файл, fault_T.m, который задает перечислимый тип fault_T как класс перечисления.

    Можно использовать объект шины и eumeration класс, чтобы установить и типы данных параметров сигнала в моделях Simulink.

Этот пример показывает, как сгенерировать представление Simulink типа структуры, поля которого используют пользовательские типы данных (typedef).

Создайте файл ex_integer_aliases.h в вашей текущей папке.

typedef int sint_32;

typedef unsigned short uint_16;

Создайте файл ex_cc_struct_alias.h в вашей текущей папке.

#include "ex_integer_aliases.h"

typedef struct {
    sint_32 accum;
    uint_16 index;
} my_ints_T;

Импортируйте тип структуры в Simulink как объект Simulink.Bus в базовом рабочем пространстве. Импортируйте операторы typedef, когда Simulink.AliasType возражает.

Simulink.importExternalCTypes('ex_cc_struct_alias.h');

Осмотрите типы данных элементов шины в объекте шины. Например, осмотрите свойство DataType первого элемента шины, который соответствует полю accum структуры.

my_ints_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'accum'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'sint_32'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

Функция Simulink.importExternalCTypes использует сгенерированные объекты Simulink.AliasType установить типы данных элементов шины.

Осмотрите объекты Simulink.AliasType в базовом рабочем пространстве. Например, объект под названием sint_32 соответствует одному из операторов typedef в ex_integer_aliases.h h.

sint_32
sint_32 = 

  AliasType with properties:

    Description: ''
      DataScope: 'Imported'
     HeaderFile: 'ex_integer_aliases.h'
       BaseType: 'int32'

Для большинства хостов - компьютеров (для которого функция предназначается по умолчанию), размер слова int составляет 32 бита, и размер слова unsigned short составляет 16 битов. Функция сопоставляет int, и unsigned short к Simulink вводит int32 и uint16.

Если у вас есть Embedded Coder, код, который вы генерируете от модели, может использовать sint_32 и uint_16 вместо стандартных имен типов данных, int32_T и uint16_T.

Этот пример показывает, как сохранить импортированные типы данных в словаре данных Simulink. Словарь данных хранит спецификации данных (такой что касается сигналов и блочных значений параметров), типы данных и другие данные проектирования для одной или нескольких моделей Simulink.

В вашей текущей папке создайте файл ex_cc_simpleTypes.h h.

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

Создайте подпапку под названием myDictionaries.

mkdir('myDictionaries')

Сгенерируйте представления Simulink типов путем вызова Simulink.importExternalCTypes. Постоянно сохраните определения типа путем создания нового словаря данных, ex_cc_myTypes.sldd, в новой подпапке.

Simulink.importExternalCTypes('ex_cc_simpleTypes.h',...
    'DataDictionary','ex_cc_myTypes.sldd',...
    'OutputDir','myDictionaries');

Чтобы осмотреть содержимое словаря, установите свою текущую папку на myDictionaries и дважды кликните файл словаря.

Чтобы использовать представления Simulink в словаре, необходимо соединить модель или модели к словарю. Смотрите Перемещают Модели, чтобы Использовать Словарь Данных Simulink.

Этот пример показывает, как сгенерировать представления Simulink только для перечислимого и типов данных структуры, которые вы идентифицируете по наименованию.

В вашей текущей папке создайте файл ex_cc_manySimpleTypes.h h. Файл задает три типа структуры: params_T, signals_T и states_T.

typedef struct {
    double coeff;
    double init;
} params_T;

typedef struct {
    double flow_rate;
    double steam_press;
} signals_T;

typedef struct {
    double accum;
    double error;
} states_T;

Сгенерируйте представления Simulink только для params_T и signals_T.

Simulink.importExternalCTypes('ex_cc_manySimpleTypes.h',...
    'Names',{'params_T','signals_T'});

Объекты Simulink.Bus, params_T и signals_T, появляются в базовом рабочем пространстве.

По умолчанию Simulink.importExternalCTypes представляет перечислимый тип данных путем создания класса перечисления, который выводит от встроенного класса Simulink.IntEnumType. Когда вы моделируете или генерируете код от модели, которая использует сгенерированный класс, параметры конфигурации, которые вы выбираете для модели (например, на панели Аппаратной реализации) определяют определенную целочисленную длину, которую используют Simulink.IntEnumType и класс перечисления.

По умолчанию функция интерпретирует типичные, примитивные типы данных C, такие как short и int, согласно размерам слова вашего хоста - компьютера. Например, чтобы представлять поле структуры int, функция обычно применяет 32-битный тип данных int32 к соответствующему элементу шины. Когда это необходимо, чтобы моделировать и сгенерировать код для аппаратных средств кроме вашего хоста - компьютера, используйте аргумент пары HardwareImplementation, чтобы идентифицировать целевой компьютер и, следовательно, размеры слова аппаратных средств.

Этот пример показывает, как импортировать типы данных из кода, который вы намереваетесь использовать на 16-битных аппаратных средствах. Для этой платы int имеет 16-битную длину, и каждый элемент перечислимых данных (enum) использует 16 битов.

В вашей текущей папке создайте файл ex_cc_intTypes.h h.

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    int coeff;
    int init;
} params_T;

Код задает перечислимый тип данных и тип структуры, поля которого используют типичный тип данных C int.

Чтобы сгенерировать точное представление Simulink типа структуры, сначала откройте существующую модель или создайте новую модель. Для этого примера создайте новую модель под названием ex_hdwImpl_16bit.

В новой модели, Параметры конфигурации набора> Аппаратная реализация> поставщик Устройства к Atmel. Установите Тип устройства на AVR.

Также в командной строке, используйте эти команды, чтобы создать и сконфигурировать модель:

new_system('ex_hdwImpl_16bit','Model');
set_param('ex_hdwImpl_16bit','ProdHWDeviceType','Atmel->AVR')

Сгенерируйте представления Simulink типов. Чтобы задать размеры слова целевых 16-битных аппаратных средств, извлеките образцовые параметры конфигурации (которые включают настройки Hardware Implementation) как объект Simulink.ConfigSet.

configSet = getActiveConfigSet('ex_hdwImpl_16bit');
Simulink.importExternalCTypes('ex_cc_intTypes.h','HardwareImplementation',configSet);

Объект Simulink.Bus params_T появляется в базовом рабочем пространстве. Элементы шины, такие как coeff, используют тип данных Simulink int16.

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

В вашей текущей папке файл fault_T.m задает класс перечисления fault_T. Класс выводит от Simulink.IntEnumType, таким образом, необходимо использовать образцовые параметры конфигурации, чтобы идентифицировать целевой компьютер и, следовательно, правильная нативная целочисленная длина.

Создайте файл ex_cc_fixpt_struct.h в вашей текущей папке.

typedef struct {
    
    int coeff;   /* Word length 16, 
       binary fraction length 7 */
    
    int init;   /* Word length 16, 
       binary fraction length 3 */
    
} params_T;

Файл задает тип структуры, поля которого используют типы данных фиксированной точки. Например, структура хранит поле coeff в 16-битном целочисленном типе данных со знаком. Длина двоичной дроби 7 связывает сохраненное целочисленное значение с реальным значением.

Предположим, что этот код работает с 16-битными аппаратными средствами (таким образом, что типичный тип данных C int имеет 16-битный размер слова). Чтобы сгенерировать представление Simulink типа, сначала создайте объект coder.HardwareImplementation, который идентифицирует аппаратные средства.

hdw = coder.HardwareImplementation;
hdw.ProdHWDeviceType = 'Atmel->AVR';

Сгенерируйте представление Simulink типа структуры.

Simulink.importExternalCTypes('ex_cc_fixpt_struct.h',...
    'HardwareImplementation',hdw);

Объект Simulink.Bus, params_T, появляется в базовом рабочем пространстве. Каждый элемент шины, такой как coeff, использует тип данных int16.

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

Simulink.importExternalCTypes не может вывести масштабирование фиксированной точки (длина двоичной дроби) от кода С. Необходимо вручную задать типы данных элементов шины. Чтобы задать типы данных в командной строке, используйте функцию fixdt.

params_T.Elements(1).DataType = 'fixdt(1,16,7)';
params_T.Elements(2).DataType = 'fixdt(1,16,3)';

Чтобы задать типы данных в интерактивном режиме (при помощи Ассистента Типа данных), используйте Редактор Шины.

buseditor

Этот пример показывает, как поддержать представления Simulink типов данных C, определения которых вы изменяете во время срока действия проекта моделирования.

Импортируйте пользовательские типы C

Создайте файл ex_cc_myTypes_rec.h в вашей текущей папке. Файл задает пользовательский тип структуры.

typedef struct {
    double flow;
    double pres;
    double tqe;
} sigStructType;

Сгенерируйте объект Simulink.Bus, который представляет тип.

Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

Измените определение типа в коде С

В ex_cc_myTypes_rec.h добавьте поле под названием spd к sigStructType.

В том же файле создайте новый тип структуры, stateStructType.

typedef struct {
    double flow;
    double pres;
    double tqe;
    double spd;
} sigStructType;

typedef struct {
    double err;
    double read;
    double write;
} stateStructType;

Попытайтесь импортировать типы снова

Попытайтесь сгенерировать объекты шины, которые представляют типы.

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

Функция генерирует предупреждения в командной строке. Вместо того, чтобы полагаться на предупреждения, можно осмотреть вывод, importInfo, чтобы определить, не удалось ли функции импортировать какие-либо типы.

importInfo.failedToImport.Bus
ans =

  1×1 cell array

    {'sigStructType'}

Функция не импортировала sigStructType. Соответствующий объект шины в базовом рабочем пространстве все еще имеет только три элемента шины. Чтобы определить причину, что функция не импортировала sigStructType, осмотрите поле report importInfo.

Импортируйте sigStructType снова. На этот раз перезапишите существующий объект шины.

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h',...
    'Names',importInfo.failedToImport.Bus,'Overwrite','on');

Когда вы перезаписываете существующие представления Simulink, перезаписываются любые индивидуальные настройки, которые вы сделали к представлениям Simulink (таким как приложение типов данных фиксированной точки, чтобы соединить шиной элементы).

Входные параметры

свернуть все

Имена и пути заголовочных файлов, чтобы проанализировать, заданный как вектор символа, массив ячеек из символьных векторов, строка или массив строк. Включайте расширение файла .hpp или .h.

При использовании иерархию включенных (#include) заголовочные файлы, чтобы задать ваши типы, когда вы задаете HeaderFiles, необходимо идентифицировать только файлы точки входа. Функция анализирует включенные файлы, а также идентифицированные файлы точки входа. Если включенные файлы не находятся в той же папке как соответствующий файл точки входа, используйте аргумент пары IncludeDirs, чтобы идентифицировать дополнительные папки.

Пример: 'myHeader. h

Пример: {'thisHeader.hpp', 'thatHeader.hpp'}

Типы данных: char | ячейка | строка

Имя загруженной модели Simulink, для которой можно импортировать типы, заданные как вектор символа, или представить скаляр в виде строки. Модель загружается, если, например, вы открываете модель или используете функцию load_system. Когда вы используете этот аргумент, функцию:

  • Ищет образцовые параметры конфигурации пользовательские заголовочные файлы и анализирует те заголовочные файлы для типов данных, чтобы импортировать. Только параметры конфигурации на Целевой панели Моделирования влияют на этот поиск.

    Например, если в модели вы устанавливаете Параметры конфигурации>, Цель Моделирования> Вставляет пользовательский код С в сгенерированный> Заголовочный файл к #include "myTypes.h", функция анализирует myTypes.h для типов, чтобы импортировать.

  • Интерпретирует типичные типы данных C, такие как int или short согласно размерам слова вашего хоста - компьютера. Не используйте аргумент пары HardwareImplementation, чтобы заменить эту интерпретацию.

Пример: 'myModel'

Типы данных: char | string

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: Simulink.importExternalCTypes ('myHdr.h', 'DataDictionary', 'myDictionary.sldd')

Назовите и, опционально, путь MAT-файла, чтобы создать для хранения сгенерированного Simulink.Bus и объектов Simulink.AliasType, заданных как вектор символа или строка. Если вы не используете MATFile, по умолчанию, функция генерирует объекты в базовом рабочем пространстве.

Функция не генерирует определения перечисления в MAT-файлах.

Если вы импортируете некоторые типы struct и примитивные операторы typedef при помощи MATFile и более позднего импорта некоторые из тех же типов снова при помощи MATFile, функция полностью заменяет старый MAT-файл на новый. Функция отменяет любые изменения, которые вы сделали к содержимому старого MAT-файла.

Вы не можете использовать MATFile и аргументы пары DataDictionary одновременно.

Пример: 'myMat.mat'

Пример: 'myMat'

Пример: fullfile ('подпапка', 'myMat')

Типы данных: char | string

Назовите и, опционально, путь словаря данных Simulink, чтобы использовать или создать для хранения сгенерированных перечислений и объектов, заданных как вектор символа или строка. Когда вы используете этот парный аргумент, функция импортирует перечислимые типы, когда Simulink.data.dictionary.EnumTypeDefinition возражает и хранит те объекты (а также объекты Simulink.Bus и объекты Simulink.AliasType) в целевом словаре.

Для получения информации о словарях данных смотрите то, Что Словарь Данных?.

Можно опционально задать расширение .sldd.

Вы не можете использовать DataDictionary и аргументы пары MATFile одновременно.

Пример: 'myDict.sldd'

Пример: 'myDict'

Пример: fullfile ('подпапка', 'myDict.sldd')

Типы данных: char | string

Имена типов, чтобы импортировать, заданный как вектор символа, массив ячеек из символьных векторов, строка или массив строк. По умолчанию, если вы не используете Names, функция пытается импортировать все пользовательские типы, которые задают идентифицированные заголовочные файлы.

Чтобы совпадать с несколькими именами типов односимвольному вектору, используйте звездочку (*).

Пример: 'myEnumType'

Пример: {'myEnumType', 'myStructType'}

Пример: 'my*Type'

Типы данных: char | ячейка | строка

Параметры компилятора, чтобы задать макросы, которые влияют на определения типа C, заданные как вектор символа, или представляют скаляр в виде строки. Например, макрос влияет на определение типа, если вы заключаете определение в блок #ifdef, который проверяет, задан ли макрос.

Используйте Defines, чтобы задать макроопределения, которые вы в противном случае задаете через параметры компилятора, такие как -D.

Пример: 'SIGSTRUCT=1'

Пример: 'SIGSTRUCT=1 ENUM=1'

Типы данных: char | string

Параметры компилятора, чтобы удалить макросы, которые влияют на определения типа C, заданные как вектор символа, или представляют скаляр в виде строки. Например, макрос влияет на определение типа, если вы заключаете определение в блок #ifdef, который проверяет, задан ли макрос.

Используйте UnDefines, чтобы задать макро-удаления, которые вы в противном случае задаете через параметры компилятора, такие как -U.

Пример: 'SIGSTRUCT'

Пример: 'ПЕРЕЧИСЛЕНИЕ SIGSTRUCT'

Типы данных: char | string

Папки, которые содержат зависимый, включенный (#include) заголовочные файлы, заданные как вектор символа, массив ячеек из символьных векторов, строка или массив строк. Используйте этот парный аргумент, чтобы позволить функции определить местоположение и проанализировать дополнительные заголовочные файлы, на которых первичные заголовочные файлы (который вы задаете с аргументом headerFiles), зависят.

При использовании синтаксис modelName вместо синтаксиса headerFiles в целевой модели, можно использовать Целевые параметры конфигурации Моделирования, чтобы задать, включают пути. В этом случае вы не должны использовать аргумент пары IncludeDirs.

Пример: 'myHeaders'

Пример: fullfile ('myProject', 'myHeaders')

Пример: {fullfile ('myProject', 'myHeaders'), fullfile ('myProject', 'myOtherHeaders')}

Типы данных: char | ячейка | строка

Папка для того, чтобы хранить сгенерированные файлы, заданные как вектор символа или строка. Функция помещает сгенерированные файлы, такие как файлы скрипта classdef и файлы словаря данных, в этой папке.

Папка, которую вы задаете, должна существовать, прежде чем вы будете использовать функцию.

Пример: 'myDictionaries'

Пример: fullfile ('myProject', 'myDictionaries')

Типы данных: char | string

Размеры слова для интерпретации типичных, примитивных типов данных C, заданных как объект Simulink.ConfigSet или coder.HardwareImplementation.

  • Чтобы использовать объект Simulink.ConfigSet, можно извлечь конфигурацию модели от модели при помощи функций, таких как getConfigSet и getActiveConfigSet. Этот метод позволяет вам использовать диалоговое окно Configuration Parameters, чтобы идентифицировать ваш целевой компьютер (через параметры конфигурации Аппаратной реализации).

  • Чтобы использовать объект coder.HardwareImplementation (который вы создаете и конфигурируете программно), задайте свойства объекта, такие как ProdHWDeviceType, чтобы идентифицировать ваш целевой компьютер. Объект затем устанавливает другие свойства, такие как ProdBitPerInt, которые отражают нативный целочисленный размер аппаратных средств.

Функция осматривает объект определить который целочисленные типы данных Simulink использовать при интерпретации типичных типов данных C, таких как int. Например, если вы создаете объект coder.HardwareImplementation идентифицировать 16-битные аппаратные средства и затем использовать функцию, чтобы импортировать тип структуры, поля которого используют тип данных C int, функция генерирует объект шины, элементы шины которого используют тип данных Simulink int16. Функция использует производственные аппаратные настройки, не тестовые аппаратные настройки.

Для получения дополнительной информации о настройках аппаратной реализации для моделей Simulink, смотрите, Конфигурируют Опции Среды выполнения (Simulink Coder).

Спецификация, чтобы перезаписать существующие представления Simulink, заданные как 'on' или 'off'. Если импортированный тип уже имеет представительство в Simulink:

  • Если вы задаете 'off' или если вы не задаете Overwrite, функция не импортирует тип. В выходном аргументе, importInfo, поле failedToImport идентифицирует тип.

  • Если вы задаете 'on', функция перезаписывает существующее представление Simulink.

При использовании функцию, чтобы импортировать некоторые типы в базовое рабочее пространство или словарь данных и позже настроить сгенерированные представления Simulink, когда вы используете функцию снова и устанавливаете Overwrite на 'on', функция не сохраняет ваши индивидуальные настройки. Эти индивидуальные настройки могут включать:

  • В определении класса перечисления, реализовывая дополнительные методы или изменяя сгенерированные методы, такие как getDataScope (см., Настраивают Перечисление Simulink).

  • Изменение свойств сгенерированного объекта Simulink.Bus или Simulink.AliasType (например, вручную установка типов данных элементов шины к типу данных фиксированной точки).

Спецификация, чтобы сгенерировать сообщения для успешных операций импорта, заданных как 'on' или 'off'.

  • Если вы задаете 'off' или если вы не задаете Verbose, функциональные типы импорта тихо. Сообщения не появляются в Командном окне, если функция не может импортировать тип.

  • Если вы задаете 'on', функция генерирует сообщение в Командном окне для каждой операции во время процесса импорта.

Выходные аргументы

свернуть все

Информация о типах, которые были импортированы и не импортированы, возвратилась как структура с этими полями.

Описания типов, которые были импортированы и не импортированы, возвратились как вектор символа. Осмотрите значение этого поля, чтобы определить причину, что функция не могла импортировать тип.

Типы, которые не были импортированы, возвратились как структура с этими полями.

Имя поляЗначение поляЦель
BusМассив ячеек из символьных векторовИмена структуры (struct) типы, которые не были импортированы.
EnumМассив ячеек из символьных векторовИмена перечислимых типов (enum), которые не были импортированы.
AliasTypeМассив ячеек из символьных векторовИмена примитивных операторов typedef, которые не были импортированы.

Типы, которые были успешно импортированы, возвратились как структура с этими полями.

Имя поляЗначение поляЦель
BusМассив ячеек из символьных векторовИмена структуры (struct) типы, которые были импортированы. Сгенерированные объекты Simulink.Bus используют эти имена.
EnumМассив ячеек из символьных векторовИмена перечислимых типов (enum), которые были импортированы. Сгенерированные классы перечисления или объекты Simulink.data.dictionary.EnumTypeDefinition используют эти имена.
AliasTypeМассив ячеек из символьных векторовИмена примитивных операторов typedef, которые были импортированы. Сгенерированные объекты Simulink.AliasType используют эти имена.

Ограничения

  • Функция не поддерживает:

    • Типы данных C, которые не соответствуют типу, который поддерживает Simulink. Например, Simulink не распознает эквивалент для long double. Для получения информации о типах данных, которые поддерживает Simulink, смотрите Типы данных, Поддержанные Simulink.

    • Типы указателей, такие как структура, которая задает поле, значение которого является указателем или оператором typedef, базовый тип которого является типом указателя.

    • Структуры, которые задают поле, значение которого имеет больше чем одну размерность.

      Если значение поля является 1D массивом, функция создает элемент шины, который представляет вектор, не матрицу.

    • Объединения.

  • Если поле структуры представляет данные фиксированной точки, или если оператор typedef сопоставляет с базовым типом фиксированной точки, функция устанавливает тип данных соответствующего элемента шины или объекта Simulink.AliasType к соответствующему целому типу Simulink (такому как int16). Средство импорта не может определить фиксированную точку, масштабирующуюся путем парсинга кода С. После использования функции необходимо вручную задать тип данных элемента шины или базовый тип объекта Simulink.AliasType при помощи функции fixdt.

Советы

  • Если график блок MATLAB function или Stateflow® в вашей модели использует импортированное перечисление или тип структуры, сконфигурируйте образцовые параметры конфигурации, чтобы включать (#include) определение типа от вашего внешнего заголовочного файла. Смотрите Управление Импортированные Определения Шины и Перечисляемого типа (для блока MATLAB function) и Интегрируйте Пользовательский Код C/C++ для Моделирования (Stateflow) и Интегрируйте Пользовательские Структуры в диаграммах Stateflow (Stateflow) (для графика).

  • По умолчанию:

    • Для импортированного перечисления, потому что класс перечисления Simulink выводит от Simulink.IntEnumType, когда вы моделируете или генерируете код от модели, перечисление использует целочисленный размер, который является нативным к вашему целевому компьютеру. Вы задаете характеристики своего целевого компьютера при помощи образцовых параметров конфигурации, таких как поставщик Производственного устройства и вводите и Нативный размер слова в производственных аппаратных средствах.

    • Для импортированного типа структуры:

      • Функция импортирует поле структуры, так же численно объединяют, только если поле использует один из соответствующих типов структуры Simulink Coder как тип данных. Например, если поле структуры в вашем внешнем коде использует тип данных cint8_T, функция импортирует поле как элемент шины (объект Simulink.BusElement), чьим типом данных является int8 и чей Complexity свойство установлено в 'complex'.

      • Для вложенных структур функция генерирует объект шины для каждого уникального типа структуры.

    • Для импортированного типа структуры или перечисления, если ваш внешний код использует оператор typedef, чтобы назвать тип, имя сгенерированного объекта шины или класса перечисления Simulink совпадает с именем typedef. Если ваш код не использует оператор typedef, именем объекта или класса является struct_type или enum_type, где type является именем тега типа. Если вы не задаете имя тега или применяете имя typedef, Simulink генерирует произвольное имя для объекта или класса.

    • Функция конфигурирует сгенерированные представления Simulink, как импортировано в целях моделирования и генерации кода. Например, для объектов шины, функция устанавливает свойство DataScope на 'Imported' и свойство HeaderFile к имени вашего внешнего заголовочного файла. Чтобы моделировать или сгенерировать код от модели, которая использует одно из этих представлений Simulink, необходимо сделать заголовочный файл доступным для модели.

  • Когда вы задаете файлы для Simulink.importExternalCTypes, чтобы использовать или сгенерировать, например, при помощи аргумента пары DataDictionary:

    • Если существующие файлы, чтобы использовать находятся в вашей текущей папке или на пути MATLAB, вы не должны задавать путь к файлу. Можно задать имя файла отдельно.

    • Чтобы управлять местоположением папки сгенерированных файлов, можно задать пути, а также имена файлов. Можно также использовать аргумент пары OutputDir.

Введенный в R2017a

Была ли эта тема полезной?