Замените coder.ceval Вызовы внешних функций

coder.ceval вызовы функции внешний C/C++ функционируют из кода, сгенерированного из кода MATLAB®. Заменяющее программное обеспечение кода поддерживает замену функции, которую вы задаете в вызове coder.ceval. Применение этого заменяющего сценария кода должно записать типовой код MATLAB, который можно настроить для других платформ с заменами кода. Заменяющая библиотека кода может задать специфичные для оборудования замены кода для вызова функции. Используйте coder.ceval в коде MATLAB, из которого вы хотите сгенерировать использование кода С:

  • MATLAB Coder™

  • Код MATLAB в блоке MATLAB function Simulink®

Файлы в качестве примера

Для примеров в Интерактивной Внешней Заменяющей Спецификации Вызова функции с Заменяющим Инструментом Кода и Программируемой Внешней Заменяющей Спецификации Вызова функции вы, должно быть, настроили следующее:

  • Пользовательские C функционируют my_add.c.

    /* my_add.c */
    
    #include "my_add.h"
    
    double my_add(double in1, double in2)
    {
      return in1 + in2;
    }
  • Пользовательский заголовочный файл C my_add.h.

    /* my_add.h */
    
    double my_add(double in1, double in2);
    
  • Функция MATLAB call_my_add.m, который использует coder.ceval вызвать my_add.c.

    function y = call_my_add(in1, in2)  %#codegen
    
    y=0.0;
    
    if ~coder.target('Rtw')
    % Executing in MATLAB, call MATLAB equivalent of C function my_add
      y= in1+in2;
    else
    % Executing in generated code, call C function my_add
      y = coder.ceval('my_add', in1, in2);
    end
    
  • Тест MATLAB функционирует call_my_add_test.m, который вызывает call_my_add.m.

    in1=10;
    in2=20;
    
    y = call_my_add(in1, in2);
    
    disp('Output')
    disp('y =')
    disp(y);
  • Замена C функционирует my_add_replacement.c.

    /* my_add_replacement.c */
    
    #include "my_add_replacement.h"
    
    double my_add_replacement(double in1, double in2)
    {
      return in1 + in2;
    }
  • Замена C заголовочный файл my_add_replacement.h.

    /* my_add_replacement.h */
    
    double my_add_replacement(double in1, double in2);
    

Интерактивная внешняя заменяющая спецификация вызова функции с заменяющим инструментом кода

В этом примере показано, как задать заменяющую запись таблицы кода для функции MATLAB, которая вызывает coder.ceval вызвать внешнюю функцию C. Пример показывает, как задать запись в интерактивном режиме с Заменяющим Инструментом Кода.

  1. Идентифицируйте или создайте код C/C++ и соответствующие заголовочные файлы, функция MATLAB, которая вызывает coder.ceval, тестовая функция MATLAB и исходные и заголовочные файлы для вашего заменяющего кода. Чтобы следовать наряду с этим примером, настройте файлы, идентифицированные в Файлах В качестве примера.

  2. В Заменяющем Инструменте Кода добавьте таблицу, выберите ту таблицу и добавьте функциональную запись. Для получения дополнительной информации смотрите, Задают Заменяющую Оптимизацию Библиотеки Кода.

  3. На вкладке Mapping Information выберите Custom для параметра Function.

  4. В текстовом поле function-name введите пользовательское имя функции. В данном примере введите имя my_add.

  5. Под полем списка Conceptual arguments нажмите +, чтобы добавить три аргумента. По умолчанию инструмент задает выходной аргумент y1 и входные параметры u1 и u2 из типа double.

  6. В разделе Replacement function> Function prototype введите имя my_add_replacement в текстовом поле Name.

  7. Под полем списка Function arguments нажмите +, чтобы добавить три аргумента реализации функции. По умолчанию инструмент задает выходной аргумент y1 и входные параметры u1 и u2 типа double. Используйте настройки по умолчанию.

  8. В поле Function signature preview, если вы видите ожидаемую функциональную подпись, нажимают Apply. Функциональная подпись для этого примера, появляется как:

    double my_add_replacement(double u1, double u2);
  9. На вкладке Build Information задайте my_add_replacement.h для параметра Implementation header file и my_add_replacement.c для Implementation source file.

  10. Нажмите Validate entry.

  11. Сохраните заменяющую таблицу кода в той же папке как my_add_replacement.c. Назовите файл crl_table_my_add.m.

Протестировать пример:

  1. Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.

  2. Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.

  3. Сгенерируйте код и отчет.

  4. Рассмотрите замены кода.

Программируемая внешняя заменяющая спецификация вызова функции

В этом примере показано, как задать заменяющую запись таблицы кода для функции MATLAB, которая вызывает coder.ceval вызвать внешнюю функцию C. Пример показывает, как задать запись программно.

  1. Идентифицируйте или создайте код C/C++ и соответствующие заголовочные файлы, функция MATLAB, которая вызывает coder.ceval вызвать функцию C/C++, тестовую функцию MATLAB и исходные и заголовочные файлы для вашего заменяющего кода. Чтобы следовать наряду с этим примером, настройте файлы, идентифицированные в Файлах В качестве примера.

  2. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hLib = crl_table_my_add
  3. В теле функции составьте таблицу путем вызова функционального RTW.TflTable.

  4. Создайте запись для отображения функции с вызовом RTW.TflCFunctionEntry функция.

    hEnt = RTW.TflCFunctionEntry;
  5. Параметры записи функции множества с вызовом setTflCFunctionEntryParameters функция.

    hEnt.setTflCFunctionEntryParameters( ...
              'Key', 'my_add', ...
              'Priority', 100, ...
              'ImplementationName', 'my_add_replacement', ...
              'ImplementationHeaderFile', 'my_add_replacement.h', ...
              'ImplementationSourceFile', 'my_add_replacement.c');
  6. Создайте концептуальные аргументы y1, u1, и u1. Этот пример использует вызовы getTflArgFromString и addConceptualArg функции, чтобы создать и добавить аргументы.

    arg = hEnt.getTflArgFromString('y1','double');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEnt.addConceptualArg(arg);
    
    arg = hEnt.getTflArgFromString('u1','double');
    hEnt.addConceptualArg(arg);
    
    arg = hEnt.getTflArgFromString('u2','double');
    hEnt.addConceptualArg(arg);
  7. Создайте аргументы реализации и добавьте их в запись. Этот пример использует вызовы getTflArgFromString функция, чтобы создать аргументы реализации. Эти функции сопоставляют с аргументами в заменяющем прототипе функции: выходной аргумент y1 и входные параметры u1 и u2. Для каждого аргумента пример использует удобный метод setReturn или addArgument задавать, является ли аргумент возвращаемым значением или аргументом. Для каждого аргумента этот пример добавляет аргумент в массив записи аргументов реализации.

    arg = hEnt.getTflArgFromString('y1','double');
    arg.IOType = 'RTW_IO_OUTPUT';
    hEnt.Implementation.setReturn(arg); 
    
    arg = hEnt.getTflArgFromString('u1','double');
    hEnt.Implementation.addArgument(arg);
    
    arg = hEnt.getTflArgFromString('u2','double');
    hEnt.Implementation.addArgument(arg);
    
  8. Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

    hLib.addEntry(hEnt); 
    
  9. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Протестировать пример:

  1. Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.

  2. Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.

  3. Сгенерируйте код и отчет.

  4. Рассмотрите замены кода.

Похожие темы