В этом примере показано, как обнаружить переполнения с помощью MATLAB® Coder™ приложения. На этапе численной проверки в процессе преобразования вы принимаете решение симулировать код с фиксированной точкой с помощью масштабированных двойных чисел. Затем приложение сообщает, какие выражения в сгенерированном коде приводят к значениям, которые переполняют тип данных с фиксированной точкой.
Этот пример требует следующих продуктов:
MATLAB
MATLAB CODER
Fixed-Point Designer™
Компилятор C
См. «Поддерживаемые компиляторы».
Можно использовать mex -setup
для изменения компилятора по умолчанию. См. Раздел «Изменение компилятора по умолчанию».
Создайте локальную рабочую папку, например c:\overflow
.
Измените на docroot\toolbox\fixpoint\examples
папка. В командной строке MATLAB введите:
cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples'))
Скопируйте overflow.m
и overflow_test.m
файлы в локальную рабочую папку.
Напечатать | Имя | Описание |
---|---|---|
Код функции | overflow.m | Функция MATLAB точки входа |
Тестовый файл | overflow_test.m | Скрипт MATLAB, который тестирует overflow.m |
Перейдите к рабочей папке, содержащей файл для этого примера.
На вкладке Apps MATLAB Toolstrip, в разделе Code Generation, щелкните значок приложения.
Чтобы добавить функцию точки входа overflow
в проект перейдите к файлу overflow.m
, а затем нажмите Open. По умолчанию приложение сохраняет информацию и настройки для этого проекта в текущей папке в файле с именем overflow.prj
.
Установите Numeric Conversion значение Convert to fixed point
.
Щелкните Next, чтобы перейти к Define Input Types шагу.
Окно приложения overflow.m
по вопросам нарушений кода и готовности генерации кода. Приложение не находит проблемы в overflow.m
.
На странице Define Input Types, чтобы добавить overflow_test
в качестве тестового файла просмотрите overflow_test.m
, а затем нажмите Open.
Нажмите Autodefine Input Types.
Тестовый файл запускается. Приложение определяет из тестового файла, что входной тип b
является double(1x12)
, x
является double(256x1)
, и reset
является logical(1x1)
.
Щелкните Next, чтобы перейти к Check for Run-Time Issues шагу.
На Check for Run-Time Issues шаге генерируется MEX с инструментами. Он запускает тестовый файл overflow_test
замена вызовов на overflow
с вызовами сгенерированной MEX-функции. Если приложение находит проблемы, оно выдает предупреждения и сообщения об ошибке. Вы можете кликнуть сообщение, чтобы выделить проблемный код в панели, где можно отредактировать код.
На странице Check for Run-Time Issues приложение заполняет поле тестового файла именем overflow_test
, тестовый файл, который вы использовали для определения типов входа.
Нажмите Check for Issues.
Приложение не обнаруживает проблем.
Щелкните Next, чтобы перейти к Convert to Fixed Point шагу.
Приложение отображает скомпилированную информацию - тип, размер и сложность - для переменных в вашем коде. Дополнительные сведения см. в разделе Просмотр и изменение информации о переменной.
На вкладке Function Replacements приложение отображает функции, которые не поддерживаются для преобразования с фиксированной точкой. См. «Выполнение симуляции».
Чтобы просмотреть настройки fimath, щелкните стрелу Settings. Установите значения Product mode и Sum mode fimath KeepLSB
. Эти настройки моделируют поведение целочисленных операций в языке C.
Нажмите Analyze.
Тестовый файл, overflow_test
, бегает. Приложение отображает минимальные и максимальные области значений симуляции на вкладке Variables. Используя данные области значений симуляции, программное обеспечение предлагает фиксированные точки для каждой переменной на основе настроек предложения по типу по умолчанию и отображает их в столбце Proposed Type.
Чтобы преобразовать алгоритм с плавающей точкой в фиксированную точку, нажмите Convert.
Программа проверяет предлагаемые типы и генерирует версию функции точки входа с фиксированной точкой.
Если ошибки и предупреждения возникают во время валидации, приложение отображает их на вкладке Output. См. «Проверка типов».
Щелкните стрелку Test. Проверьте, что тестовый файл overflow_test.m
. Выберите Use scaled doubles to detect overflows и нажмите Test.
Приложение запускает тестовый файл, который вы использовали, чтобы задать входные типы для тестирования кода MATLAB с фиксированной точкой. Поскольку вы выбрали для обнаружения переполнений, он также запускает симуляцию с использованием масштабированных двойных версий предлагаемых фиксированных точек. Масштабированные двойки хранят свои данные в двойной точности с плавающей точностью, поэтому они проводят арифметику в полной области значений. Поскольку они сохраняют свои настройки фиксированной точки, они могут сообщать, когда расчеты выходят из области значений типа фиксированной точки.
Симуляция выполняется. Приложение обнаруживает переполнение. Приложение сообщает о переполнении на вкладке Overflow. Чтобы выделить переполненное выражение, щелкните переполнение.
Определите, была ли переполнена сумма или умножение.
В настройках fimath установите Product mode равным FullPrecision
, а затем повторите преобразование и снова протестируйте код с фиксированной точкой.
Переполнение все еще происходит, что указывает на то, что это сложение в выражении, которое переполнено.