Когда вы ускоряете код при помощи fiaccel
, чтобы задать тип входа, который является объектом класса значения, можно предоставить объекту в качестве примера опцию -args
.
Задайте класс значения. Например, задайте класс 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
Задайте функцию, которая берет объект класса значения как вход. Например:
function z = getarea(r) %#codegen z = calcarea(r); end
Задайте объект класса.
rect_obj = myRectangle(fi(4),fi(5))
rect_obj = myRectangle with properties: length: [1×1 embedded.fi] width: [1×1 embedded.fi]
Передайте объект в качестве примера fiaccel
при помощи опции -args
.
fiaccel getarea -args {rect_obj} -report
В отчете вы видите, что r
имеет те же свойства, length
и width
, как объект rect_object
в качестве примера.
Вместо того, чтобы обеспечить объект в качестве примера, можно создать тип для объекта класса значения и предоставить типу опцию -args
.
Задайте объект класса:
rect_obj = myRectangle(fi(4),fi(5))
rect_obj = myRectangle with properties: length: [1×1 embedded.fi] width: [1×1 embedded.fi]
Чтобы создать тип для объекта 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
Передайте тип 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® позволяет дублирующиеся имена свойства, смотрите Разделение на подклассы Нескольких Классов (MATLAB).