Вы можете использовать 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 дескриптора кода.