В отчете о преобразовании с фиксированной точкой у вас есть опция подсветить MATLAB® код, который приводит к двойным, одинарным или дорогим операциям с фиксированной точкой. Рассмотрите включение этих проверок при попытке достичь строгого проекта с одной или с фиксированной точкой.
Эти проверки по умолчанию отключены.
На странице Convert to Fixed Point, чтобы открыть диалоговое окно Settings, щелкните стрелу Settings.
В разделе Plotting and Reporting установите Highlight potential data type issues равным Yes
.
Когда преобразование завершено, откройте отчет преобразования с фиксированной точкой, чтобы просмотреть подсветку. Щелкните View report на вкладке Type Validation Output.
Создайте объект строения кода с фиксированной точкой:
cfg = coder.config('fixpt');
Установите HighlightPotentialDataTypeIssues
свойство объекта строения, чтобы true
.
cfg.HighlightPotentialDataTypeIssues = true;
При попытке достижения строгого проекта с одной или с фиксированной точкой ручной осмотр кода может быть длительным и подверженным ошибкам. Эта проверка подсвечивает все выражения, которые приводят к двойной операции.
Для строго-одинарного проекта точности задайте стандартную математическую библиотеку, которая поддерживает реализации с одной точностью. Чтобы изменить библиотеку для проекта, во время шага Сгенерировать код, в диалоговом окне параметров проекта, на вкладке Custom Code, установите Standard math library равным C99 (ISO)
.
Эта проверка подсвечивает все выражения, которые приводят к одной операции.
Дорогая проверка операций с фиксированной точкой идентифицирует возможности оптимизации для кода с фиксированной точкой. В нем выделены выражения в коде MATLAB, которые требуют громоздкого умножения или деления, дорогого округления, дорогого сравнения или многословных операций. Для получения дополнительной информации об оптимизации сгенерированного кода с фиксированной точкой смотрите Советы по повышению эффективности сгенерированного кода (Fixed-Point Designer).
Обременительные операции чаще всего происходят из-за недостаточной области значений выходов. Избегайте входов для операции умножения или деления, которая имеет размеры слова, большие, чем базовый целый тип вашего процессора. Операции с большими размерами слова могут обрабатываться в программном обеспечении, но этот подход требует гораздо большего кода и намного медленнее.
Традиционный рукописный код, особенно для приложений управления, почти всегда использует округление «без усилий». Для примера, для беззнаковых целых и двух комплементарных целых чисел, перемещение вправо и падение бит эквивалентно округлению к полу. Чтобы получить результаты, сопоставимые с или лучше, чем вы ожидаете от традиционного рукописного кода, используйте floor
метод округления. Эта проверка определяет дорогие операции округления в умножении и делении.
Операции сравнения генерируют дополнительный код, когда операция литья требуется для сравнения. Для примера при сравнении беззнакового целого числа со знаковым целым числом одно из входов сначала должно быть приведено к сигнальности другого, прежде чем можно будет выполнить операцию сравнения. Рассмотрите оптимизацию типов данных входных параметров, чтобы приведение не требовалось в сгенерированном коде.
Операции с несколькими словами могут быть неэффективными на оборудовании. Когда операция имеет вход или выходных данных, больший, чем самый большой размер слова вашего процессора, сгенерированный код содержит операции с несколькими словами. Можно избежать многословных операций в сгенерированном коде, задав локальные fimath
свойства для переменных. Можно также вручную задать вход и вывести размеры слова операций, которые генерируют код из нескольких слов.