Задайте объекты как входные параметры

Когда вы ускоряете код при помощи fiaccel, чтобы задать тип входа, который является объектом класса значения, можно предоставить объекту в качестве примера -args опция.

  1. Задайте класс значения. Например, задайте класс myRectangle.

    classdef myRectangle
        properties
            length;
            width;
        end
        methods
            function obj = myRectangle(l,w)
                if nargin > 0
                    obj.length = l;
                    obj.width = w;
                end
            end
            function area = calcarea(obj)
                area = obj.length * obj.width;
            end
        end
    end

  2. Задайте функцию, которая берет объект класса значения как вход. Например:

    function z = getarea(r)
    %#codegen
    z = calcarea(r);
    end

  3. Задайте объект класса.

    rect_obj = myRectangle(fi(4),fi(5))
    

    rect_obj = 
    
      myRectangle with properties:
    
        length: [1×1 embedded.fi]
         width: [1×1 embedded.fi]
  4. Передайте объект в качестве примера fiaccel при помощи -args опция.

    fiaccel getarea -args {rect_obj} -report

    В отчете вы видите тот r имеет те же свойства, length и width, как объект rect_object в качестве примера.

Вместо того, чтобы обеспечить объект в качестве примера, можно создать тип для объекта класса значения и предоставить типу -args опция.

  1. Задайте объект класса:

    rect_obj = myRectangle(fi(4),fi(5))
    rect_obj = 
    
      myRectangle with properties:
    
        length: [1×1 embedded.fi]
         width: [1×1 embedded.fi]

  2. Создать тип для объекта myRectangle это имеет те же типы свойства как rect_objИспользование coder.typeof. coder.typeof создает coder.ClassType объект, который задает тип для класса.

    t= coder.typeof(rect_obj)
    
    t = 
    
    coder.ClassType
       1×1 myRectangle   
          length: 1×1 embedded.fi
                    DataTypeMode: Fixed-point: binary point scaling
                      Signedness: Signed
                      WordLength: 16
                  FractionLength: 12
          
          width : 1×1 embedded.fi
                    DataTypeMode: Fixed-point: binary point scaling
                      Signedness: Signed
                      WordLength: 16
                  FractionLength: 12

  3. Передайте тип fiaccel при помощи -args опция.

    fiaccel getarea -args {t} -report

После того, как вы создадите тип, можно изменить типы свойств.

t.Properties.length = coder.typeof(fi(0,1,32,29))
t.Properties.width = coder.typeof(fi(0,1,32,29))

Можно также добавить или удалить свойства. Например, чтобы добавить свойство newprop:

t.Properties.newprop = coder.typeof(int16(1))

Непротиворечивость между coder.ClassType Определение объекта и файл определения класса

Когда вы ускоряете код, свойства coder.ClassType возразите, что вы передаете fiaccel должно быть сопоставимо со свойствами в файле определения класса. Если файл определения класса имеет свойства, которые ваш код не использует, coder.ClassType объект не должен включать те свойства. fiaccel удаляет свойства, которые вы не используете.

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

Входные параметры функции точки входа, которые являются объектами, имеют эти ограничения:

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

  • Объект не может быть глобальной переменной.

  • Если объект имеет дублирующиеся имена свойства, вы не можете использовать его с coder.Constant. Дублирующиеся имена свойства происходят в объекте подкласса в этих ситуациях:

    • Подкласс имеет свойство с тем же именем как свойство суперкласса.

    • Подкласс выводит из нескольких суперклассов, которые используют то же имя для свойства.

    Для получения информации о том, когда MATLAB® позволяет дублирующиеся имена свойства, смотрите Разделение на подклассы Нескольких Классов.

Смотрите также

Похожие темы