exponenta event banner

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

В этом примере показано, как создать код C с одинарной точностью из кода 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 с двойной точностью.

Создание кода C с одинарной точностью

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

    cfg = coder.config('lib');
    

  2. Для создания кода C с одинарной точностью вызовите codegen с -singleC вариант. Разрешить создание отчета о создании кода.

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

Просмотр сгенерированного кода одинарной точности C

Чтобы просмотреть отчет о создании кода для создания кода C, щелкните ссылку Просмотр отчета.

На панели «Созданный код» щелкните ex_2ndOrder_filter.c.

  • Переменные двойной точности имеют тип float в коде C.

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

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

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

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

См. также

| | |

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

Подробнее