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

Когда вы ускоряете код при помощи 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® позволяет создавать повторяющиеся имена свойства, см. Раздел «Подклассы нескольких классов».

См. также

Похожие темы