Проблемы типа данных в сгенерированном коде

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

Эти проверки отключены по умолчанию.

Включите опцию подсветки в приложении MATLAB CODER

  1. На странице Convert to Fixed Point, чтобы открыть диалоговое окно Settings, кликают по стрелке Настроек.

  2. При Графическом изображении и Создании отчетов, тип данных потенциала Подсветки набора выходит к Yes.

Когда преобразование будет завершено, откройте отчет преобразования фиксированной точки просмотреть выделение. Нажмите просматривают отчет во вкладке Type Validation Output.

Включите опцию подсветки в командной строке

  1. Создайте объект настройки фиксированной точки:

    cfg = coder.config('fixpt');

  2. Установите свойство HighlightPotentialDataTypeIssues объекта настройки к true.

    cfg.HighlightPotentialDataTypeIssues = true;

Безбилетник удваивается

При попытке достигнуть дизайна строго-единственной или фиксированной точки, ручной контроль кода может быть длителен и подвержен ошибкам. Эта проверка подсвечивает все выражения, которые приводят к двойной операции.

Для дизайна строгой одинарной точности задайте стандартную математическую библиотеку, которая поддерживает реализации с одинарной точностью. Чтобы изменить библиотеку для проекта, во время Сгенерировать шага Кода, в диалоговом окне настроек проекта, на вкладке Custom Code, устанавливают Стандартную математическую библиотеку на C99 (ISO).

Одиночные игры безбилетника

Эта проверка подсвечивает все выражения, которые приводят к единственной операции.

Дорогие операции фиксированной точки

Дорогая проверка операций фиксированной точки идентифицирует возможности оптимизации для фиксированной точки. Это подсвечивает выражения в коде MATLAB, которые требуют громоздкого умножения или деления, дорогого округления, дорогого сравнения или операций многословных. Для получения дополнительной информации об оптимизации сгенерированной фиксированной точки смотрите Советы для того, чтобы Сделать Сгенерированный код Более эффективным (Fixed-Point Designer).

Громоздкие операции

Громоздкие операции чаще всего происходят из-за недостаточной области значений вывода. Избегайте входных параметров к умножению или разделите операцию, которая имеет размеры слова, больше, чем основной целый тип вашего процессора. Операции с большими размерами слова могут быть обработаны в программном обеспечении, но этот подход требует намного большего количества кода и намного медленнее.

Дорогое округление

Традиционный рукописный код, специально для приложений управления, почти всегда не использует "усилия" округление. Например, для беззнакового целого и дополнительных целых чисел со знаком two, переключая право и пропуская биты эквивалентно округлению на пол. Чтобы получить результаты, сопоставимые с, или лучше, чем, что вы ожидаете от традиционного рукописного кода, используют метод округления floor. Эта проверка идентифицирует дорогие операции округления в умножении и делении.

Дорогие операции сравнения

Операции сравнения генерируют дополнительный код, когда операция кастинга требуется, чтобы делать сравнение. Например, при сравнении беззнакового целого с целым числом со знаком, один из входных параметров должен сначала быть брошен к со знаком из другого, прежде чем операция сравнения сможет быть выполнена. Рассмотрите оптимизацию типов данных входных параметров так, чтобы бросок не требовался в сгенерированном коде.

Операции многословные

Операции многословные могут быть неэффективными на аппаратных средствах. Когда операция имеет тип данных ввода или вывода, больше, чем самый большой размер слова вашего процессора, сгенерированный код содержит операции многословные. Можно избежать операций многословных в сгенерированном коде путем определения локальных свойств fimath для переменных. Можно также вручную задать размеры слова ввода и вывода операций, которые генерируют код многословный.

Была ли эта тема полезной?