Этот пример показывает, как обнаружить переполнение с помощью функции fiaccel. В числовой стадии тестирования в процессе преобразования инструмент моделирует масштабируемое использование фиксированной точки, удваивается. Это затем сообщает, какие выражения в сгенерированном коде производят значения, которые переполнили бы типа данных с фиксированной точкой.
Чтобы завершить этот пример, необходимо установить следующие продукты:
MATLAB®
Fixed-Point Designer™
Компилятор C
См. поддерживаемые компиляторы.
Можно использовать mex -setup, чтобы изменить компилятор по умолчанию. См. Компилятор Значения по умолчанию Изменения (MATLAB).
Создайте локальную рабочую папку, например, 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 |
Создайте объект coder.FixptConfig, fixptcfg, с настройками по умолчанию.
fixptcfg = coder.config('fixpt');Определите имя испытательного стенда. В этом примере именем функции испытательного стенда является overflow_test.
fixptcfg.TestBenchName = 'overflow_test';Установите размер слова по умолчанию на 16.
fixptcfg.DefaultWordLength = 16;
fixptcfg.TestNumerics = true; fixptcfg.DetectFixptOverflows = true;
Установите Product mode fimath и Sum mode к KeepLSB. Эти настройки моделируют поведение целочисленных операций на языке C.
fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''KeepLSB'', ''SumMode'', ''KeepLSB'')';Преобразуйте функцию MATLAB с плавающей точкой, overflow, к фиксированной точке код MATLAB. Вы не должны задавать входные типы для команды fiaccel, потому что она выводит типы из тестового файла.
fiaccel -float2fixed fixptcfg overflow
Фаза тестирования численных данных сообщает о переполнении.
Overflow error in expression 'acc + b( j )*z( k )'. Percentage of Current Range = 104%.
Определите если сложение или умножение в этом переполненном выражении. Установите fimath ProductMode на FullPrecision так, чтобы умножение не переполнялось, и затем запускать команду fiaccel снова.
fixptcfg.fimath = 'fimath( ''RoundingMethod'', ''Floor'', ''OverflowAction'', ''Wrap'', ''ProductMode'', ''FullPrecision'', ''SumMode'', ''KeepLSB'')'; fiaccel -float2fixed fixptcfg overflow
Фаза тестирования численных данных все еще сообщает о переполнении, указывая, что это - сложение в выражении, которое переполняется.