Можно использовать API дескриптора кода, чтобы получить метаинформацию о сгенерированном коде. Для каждой сборки модели генератор кода, по умолчанию, создает codedescriptor.dmr
файл в папке сборки. При симуляции модели в Акселераторе и Быстрых Режимах Accelerator, codedescriptor.dmr
не сгенерирован.
Можно использовать API дескриптора кода, если код сгенерирован. Используйте API дескриптора кода, чтобы описать эти элементы в сгенерированном коде:
Интерфейсы данных: импорт, выходные порты, параметры, хранилища данных и внутренние данные.
Функциональные Интерфейсы: инициализируйте, выведите, обновитесь, и оконечный.
Информация о выполнении данных и функциональных интерфейсов, таких как синхронизация требований каждой интерфейсной сущности.
Информация об иерархии модели и описание кода моделей, на которые ссылаются.
coder.descriptor.DataInterface
объект описывает различные свойства для заданного интерфейса данных в сгенерированном коде. В модели rtwdemo_comments
, существует четыре импорта, один выходной порт и настраиваемый внешний параметр. Для получения дополнительной информации об интерфейсах данных в вашей модели, используйте coder.codedescriptor.CodeDescriptor
возразите и его методы.
1. Создайте временную папку для сборки и инспекционного процесса.
currentDir = pwd; [~,cgDir] = rtwdemodir();
2. Откройте и создайте модель.
open_system('rtwdemo_comments'); evalc('rtwbuild(''rtwdemo_comments'')');
3. Создайте coder.codedescriptor.CodeDescriptor
объект для необходимой модели при помощи getCodeDescriptor
функция.
codeDescriptor = coder.getCodeDescriptor('rtwdemo_comments');
4. Чтобы получить список всех типов интерфейса данных в сгенерированном коде, используйте getDataInterfaceTypes
метод.
dataInterfaceTypes = codeDescriptor.getDataInterfaceTypes()
dataInterfaceTypes = 5x1 cell array {'Inports' } {'Outports' } {'Parameters' } {'GlobalParameters'} {'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.Double] SID: 'rtwdemo_comments:99' GraphicalName: 'In1' VariantInfo: [0x0 coder.descriptor.VariantInfo] Implementation: [1x1 coder.descriptor.StructExpression] Timing: [1x1 coder.descriptor.TimingInterface] Unit: '' Range: [0x0 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('rtwbuild(''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: [0x0 coder.descriptor.DataInterface] VariantInfo: [0x0 coder.descriptor.VariantInfo] FunctionOwner: [0x0 coder.descriptor.TypedRegion] Timing: [1x1 coder.descriptor.TimingInterface] ActualArgs: [1x0 coder.descriptor.DataInterface List]
6. Можно далее подробно остановиться на свойствах получить подробную информацию. Получить функциональное возвращаемое значение, имя и аргументы:
functionInterface.Prototype
ans = Prototype with properties: Name: 'rtwdemo_roll_initialize' Return: [0x0 coder.descriptor.types.Argument] HeaderFile: 'rtwdemo_roll.h' SourceFile: 'rtwdemo_roll.c' Arguments: [1x0 coder.descriptor.types.Argument List]
Используйте coder.codedescriptor.CodeDescriptor
объект получить целую информацию иерархии модели. Модель rtwdemo_async_mdlreftop
имеет rtwdemo_async_mdlrefbot
модели как модель, на которую ссылаются.
1. Создайте временную папку для сборки и инспекционного процесса.
currentDir = pwd; [~,cgDir] = rtwdemodir();
2. Откройте и создайте модель.
open_system('rtwdemo_async_mdlreftop'); evalc('rtwbuild(''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 Дескриптора Кода.