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

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

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

Включите Подсветку Опции в приложении MATLAB Coder

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

  2. В разделе Plotting and Reporting установите Highlight potential data type issues равным Yes.

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

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

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

    cfg = coder.config('fixpt');

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

    cfg.HighlightPotentialDataTypeIssues = true;

Безбилетный парный разряд

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

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

Одиночные разъемы в классе Stowaway

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

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

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

Обременительные операции

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

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

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

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

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

Операции с несколькими словами

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