Сгенерируйте код С с одинарной точностью в командной строке

В этом примере показано, как сгенерировать код С с одинарной точностью из кода MATLAB® с двойной точностью в командной строке.

Необходимые условия

Чтобы завершить этот пример, установите следующие продукты:

Создайте папку и скопируйте соответствующие файлы

  1. Создайте локальную рабочую папку, например, c:\ex_2ndOrder_filter.

  2. Превратитесь в docroot\toolbox\fixpoint\examples папка. В командной строке MATLAB, введите:

    cd(fullfile(docroot, 'toolbox', 'fixpoint', 'examples')) 

  3. Скопируйте ex_2ndOrder_filter.m и ex_2ndOrder_filter_test.m файлы к вашей локальной рабочей папке.

    ВводИмяОписание
    Код функцииex_2ndOrder_filter.mФункция MATLAB точки входа
    Тестовый файлex_2ndOrder_filter_test.m

    Скрипт MATLAB, который тестирует ex_2ndOrder_filter.m

     Функция ex_2ndOrder_filter

     ex_2ndOrder_filter_test Скрипт

Определите тип входного параметра

Определить тип входного параметра xИспользование coder.getArgTypes запускать тестовый файл ex_2ndOrder_filter_test.m

types = coder.getArgTypes('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter');

Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов. coder.getArgTypes решает что входной тип x 1x256 дважды.

Сгенерируйте и запущенный MEX с одинарной точностью, чтобы проверить числовое поведение

  1. Прежде чем вы сгенерируете код С с одинарной точностью, сгенерируете MEX-функцию с одинарной точностью, которую можно использовать, чтобы проверить поведение сгенерированного кода с одинарной точностью. Чтобы указать, что вы хотите код MEX с одинарной точностью, используйте -singleC опция.

    codegen -singleC ex_2ndOrder_filter -args types -report

    Во время генерации MEX генератор кода обнаруживает проблемы преобразования с одинарной точностью. Прежде чем вы сгенерируете код C/C++, устраните эти проблемы. Этот пример не имеет проблем преобразования с одинарной точностью.

    Сгенерированный MEX принимает вход с двойной точностью и с одинарной точностью. Можно использовать тот же тестовый файл, чтобы запустить функцию MATLAB с двойной точностью и MEX-функцию с одинарной точностью. Вы не должны изменять тестовый файл, чтобы вызвать MEX-функцию с одинарной точностью.

  2. Запустите тестовый файл ex_2ndOrder_filter_test.m. Этот файл вызывает функцию MATLAB с двойной точностью ex_2ndOrder_filter.m.

    ex_2ndOrder_filter_test

  3. Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов.

  4. Запустите тестовый файл ex_2ndOrder_filter_test, заменяя вызовы ex_2ndOrder_filter с двойной точностью функция с вызовами ex_2ndOrder_filter_mex с одинарной точностью функция.

    coder.runTest('ex_2ndOrder_filter_test', 'ex_2ndOrder_filter')
  5. Тестовый файл запускает и отображает выводы фильтра для каждого из входных сигналов. MEX-функция с одинарной точностью приводит к тем же результатам как функция MATLAB с двойной точностью.

Сгенерируйте код С с одинарной точностью

  1. Создайте объект настройки кода для генерации статической библиотеки C, динамической библиотеки или исполняемого файла.

    cfg = coder.config('lib');
    

  2. Чтобы сгенерировать код С с одинарной точностью, вызвать codegen с -singleC опция. Включите генерацию отчета генерации кода.

    codegen -config cfg -singleC ex_2ndOrder_filter -args {types{1}} -report

Просмотрите сгенерированный код С с одинарной точностью

Чтобы просмотреть отчет генерации кода для генерации кода C, щелкните по ссылке View Report.

В панели Generated Code нажмите ex_2ndOrder_filter.c.

  • Переменные с двойной точностью имеют, вводят float в коде С.

  • Индекс i целое число.

Просмотрите потенциальные проблемы типа данных

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

Кликните по вкладке Code Insights. Расширьте Potential data type issues. Отсутствие операций с двойной точностью указывает, что никакие операции с двойной точностью не остаются.

Смотрите также

| | |

Связанные примеры

Больше о