Код с фиксированной точкой для классов MATLAB

Поддержка автоматического преобразования для классов MATLAB

Автоматический процесс преобразования с фиксированной точкой:

  • Предлагает типы данных с фиксированной точкой на основе областей значений симуляции для MATLAB® классы. Он не предлагает типы данных на основе производных областей значений для классов MATLAB.

    После симуляции приложение MATLAB Coder™:

    • Список функций содержит конструкторы классов, методы и специализации.

    • В окне Code отображаются объекты, используемые в каждой функции.

    • Предоставляет покрытие кода для методов.

    Дополнительные сведения см. в разделе «Просмотр информации о классах MATLAB».

  • Поддерживает методы классов, свойства и специализации. Для каждой специализации класса, class_nameпреобразование генерирует отдельную class_name_fixpt.m файл. Для каждого экземпляра класса сгенерированный код с фиксированной точкой содержит вызов конструктора соответствующей специализации.

  • Поддерживает классы, которые имеют get и set такие методы, как get.PropertyName, set.PropertyName. Эти методы вызываются при чтении или назначении свойств. The set методы могут быть специализированными. Иногда в сгенерированном коде с фиксированной точкой операторы назначения преобразуются в вызовы функций.

Неподдерживаемые конструкции

Автоматический процесс преобразования не поддерживает:

  • Наследование классов.

  • Пакеты.

  • Конструкторы, которые используют nargin и varargin.

Лучшие практики стиля кодирования

Когда вы пишете код MATLAB, который использует классы MATLAB:

  • Инициализируйте свойства в конструкторе классов.

  • Замените постоянные свойства статическими методами.

Для примера рассмотрим counter класс.

classdef Counter < handle
  properties
    Value = 0;
  end

  properties(Constant)
    MAX_VALUE = 128
  end
  
  methods
    function out = next(this)
      out = this.Count;
      if this.Value == this.MAX_VALUE
        this.Value = 0;
      else
        this.Value = this.Value + 1;
      end
    end
  end
end
Чтобы использовать процесс автоматического преобразования с фиксированной точкой, перепишите класс, чтобы иметь статический класс, который инициализирует свойство константы MAX_VALUE и конструктор, который инициализирует свойство Value.
classdef Counter < handle
  properties
    Value;
  end

  methods(Static)
    function t = MAX_VALUE()
      t = 128;
    end
  end
  
  methods
    function this = Counter()
      this.Value = 0;
    end 
    function out = next(this)
      out = this.Value;
      if this.Value == this.MAX_VALUE
        this.Value = 0;
      else
        this.Value = this.Value + 1;
      end
    end
  end
end