Получить описание кода сгенерированного кода

Вы можете использовать API дескриптора кода, чтобы получить мета-информацию о сгенерированном коде. Для каждой сборки модели генератор кода по умолчанию создает codedescriptor.dmr файл в папке сборки. При симуляции модели в режимах Accelerator и Rapid Accelerator, codedescriptor.dmr не сгенерирован.

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

  • Интерфейсы данных: входные порты, выходные порты, параметры, хранилища данных и внутренние данные.

  • Интерфейсы функций: инициализация, вывод, обновление и завершение.

  • Информация о выполнении интерфейсов данных и функций, например, требования к синхронизации каждой сущности интерфейса.

  • Информация о иерархии модели и описание кода ссылочных моделей.

Получение информации об интерфейсе данных

The coder.descriptor.DataInterface объект описывает различные свойства для заданного интерфейса данных в сгенерированном коде. В модель rtwdemo_comments, существует четыре входных порта, один выходной порт и настраиваемый внешний параметр. Для получения дополнительной информации об интерфейсах данных в модели используйте coder.codedescriptor.CodeDescriptor объект и его методы.

1. Создайте временную папку для процесса сборки и проверки.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. Откройте и создайте модель.

open_system('rtwdemo_comments');
evalc('slbuild(''rtwdemo_comments'')');

3. Создайте coder.codedescriptor.CodeDescriptor объект для необходимой модели при помощи getCodeDescriptor функция.

codeDescriptor = coder.getCodeDescriptor('rtwdemo_comments');

4. Чтобы получить список всех типов интерфейсов данных в сгенерированном коде, используйте getDataInterfaceTypes способ.

dataInterfaceTypes = codeDescriptor.getDataInterfaceTypes()
dataInterfaceTypes =

  5x1 cell array

    {'Inports'                 }
    {'Outports'                }
    {'Parameters'              }
    {'ExternalParameterObjects'}
    {'InternalData'            }

Чтобы получить список всех поддерживаемых интерфейсов данных, используйте getAllDataInterfaceTypes способ.

5. Для получения дополнительной информации о конкретном типе интерфейса данных используйте getDataInterfaces способ.

dataInterface = codeDescriptor.getDataInterfaces('Inports');

Этот метод возвращает свойства блоков Inport в сгенерированном коде.

6. Потому что эта модель имеет четыре входных порта, dataInterface является массивом coder.descriptor.DataInterface объекты. Получите детали первого Inport модели путем доступа к первому местоположению в массиве.

dataInterface(1)
ans = 

  DataInterface with properties:
              Type: [1x1 coder.descriptor.types.Type]
               SID: 'rtwdemo_comments:99'
     GraphicalName: 'In1'
       VariantInfo: [1x0 coder.descriptor.VariantInfo]
    Implementation: [1x1 coder.descriptor.DataImplementation]
            Timing: [1x1 coder.descriptor.TimingInterface]
              Unit: ''
             Range: [1x0 coder.descriptor.Range]

Получение информации о интерфейсе функции

Функциональные интерфейсы являются функциями точки входа в сгенерированном коде. В модель rtwdemo_roll, функции точки входа model_initialize, model_step, и model_terminate. Для получения дополнительной информации об интерфейсах функций в вашей модели используйте coder.descriptor.FunctionInterface объект.

1. Создайте временную папку для процесса сборки и проверки.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. Откройте и создайте модель.

open_system('rtwdemo_roll');
evalc('slbuild(''rtwdemo_roll'')');

3. Создайте coder.codedescriptor.CodeDescriptor объект для необходимой модели при помощи getCodeDescriptor функция.

codeDescriptor = coder.getCodeDescriptor('rtwdemo_roll');

4. Чтобы получить список всех типов интерфейсов функций в сгенерированном коде, используйте getFunctionInterfaceTypes способ.

functionInterfaceTypes = codeDescriptor.getFunctionInterfaceTypes()
functionInterfaceTypes =

  2x1 cell array

    {'Initialize'}
    {'Output'    }

Чтобы получить список всех поддерживаемых интерфейсов функции, используйте getAllFunctionInterfaceTypes способ.

5. Чтобы получить дополнительную информацию о конкретном типе интерфейса функции, используйте getFunctionInterfaces способ.

functionInterface = codeDescriptor.getFunctionInterfaces('Initialize')
functionInterface = 

  FunctionInterface with properties:
        Prototype: [1x1 coder.descriptor.types.Prototype]
     ActualReturn: [1x0 coder.descriptor.DataInterface]
      VariantInfo: [1x0 coder.descriptor.VariantInfo]
    FunctionOwner: [1x0 coder.descriptor.TypedRegion]
           Timing: [1x1 coder.descriptor.TimingInterface]
       ActualArgs: [1x0 coder.descriptor.DataInterface Sequence]

6. Для получения подробной информации можно расширить свойства. Чтобы получить функцию возврата значение, имя и аргументы:

functionInterface.Prototype
ans = 

  Prototype with properties:
          Name: 'rtwdemo_roll_initialize'
        Return: [1x0 coder.descriptor.types.Argument]
    HeaderFile: 'rtwdemo_roll.h'
    SourceFile: 'rtwdemo_roll.c'
     Arguments: [1x0 coder.descriptor.types.Argument Sequence]

Получение информации о иерархии модели

Используйте coder.codedescriptor.CodeDescriptor объект для получения всей информации иерархии модели. Модель rtwdemo_async_mdlreftop имеет модель rtwdemo_async_mdlrefbot как ссылку на модель.

1. Создайте временную папку для процесса сборки и проверки.

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. Откройте и создайте модель.

open_system('rtwdemo_async_mdlreftop');
evalc('slbuild(''rtwdemo_async_mdlreftop'')');

3. Создайте coder.codedescriptor.CodeDescriptor объект для необходимой модели при помощи getCodeDescriptor функция.

codeDescriptor = coder.getCodeDescriptor('rtwdemo_async_mdlreftop');

4. Получите список всех ссылочных моделей при помощи getReferencedModelNames способ.

refModels = codeDescriptor.getReferencedModelNames()
refModels =

  1x1 cell array

    {'rtwdemo_async_mdlrefbot'}

5. Чтобы получить coder.codedescriptor.CodeDescriptor объект для ссылочной модели используйте getReferencedModelCodeDescriptor способ.

refCodeDescriptor = codeDescriptor.getReferencedModelCodeDescriptor('rtwdemo_async_mdlrefbot');

Теперь можно использовать refCodeDescriptor объект для получения дополнительной информации о ссылке на модель с помощью всех доступных методов в API дескриптора кода.

Похожие темы