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. Пример показывает, как задать запись в интерактивном режиме с Заменяющим Инструментом Кода.
Идентифицируйте или создайте код C/C++ и соответствующие заголовочные файлы, функция MATLAB, которая вызывает coder.ceval, тестовая функция MATLAB и исходные и заголовочные файлы для вашего заменяющего кода. Чтобы следовать наряду с этим примером, настройте файлы, идентифицированные в Файлах В качестве примера.
В Заменяющем Инструменте Кода добавьте таблицу, выберите ту таблицу и добавьте функциональную запись. Для получения дополнительной информации смотрите, Задают Заменяющую Оптимизацию Библиотеки Кода.
На вкладке Mapping Information выберите Custom для параметра Function.
В текстовом поле function-name введите пользовательское имя функции. В данном примере введите имя my_add.
Под полем списка Conceptual arguments нажмите +, чтобы добавить три аргумента. По умолчанию инструмент задает выходной аргумент y1 и входные параметры u1 и u2 из типа double.
В разделе Replacement function> Function prototype введите имя my_add_replacement в текстовом поле Name.
Под полем списка Function arguments нажмите +, чтобы добавить три аргумента реализации функции. По умолчанию инструмент задает выходной аргумент y1 и входные параметры u1 и u2 типа double. Используйте настройки по умолчанию.
В поле Function signature preview, если вы видите ожидаемую функциональную подпись, нажимают Apply. Функциональная подпись для этого примера, появляется как:
double my_add_replacement(double u1, double u2);
На вкладке Build Information задайте my_add_replacement.h для параметра Implementation header file и my_add_replacement.c для Implementation source file.
Нажмите Validate entry.
Сохраните заменяющую таблицу кода в той же папке как my_add_replacement.c. Назовите файл crl_table_my_add.m.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте код и отчет.
Рассмотрите замены кода.
В этом примере показано, как задать заменяющую запись таблицы кода для функции MATLAB, которая вызывает coder.ceval вызвать внешнюю функцию C. Пример показывает, как задать запись программно.
Идентифицируйте или создайте код C/C++ и соответствующие заголовочные файлы, функция MATLAB, которая вызывает coder.ceval вызвать функцию C/C++, тестовую функцию MATLAB и исходные и заголовочные файлы для вашего заменяющего кода. Чтобы следовать наряду с этим примером, настройте файлы, идентифицированные в Файлах В качестве примера.
Создайте табличный файл определения, который содержит функциональное определение. Например:
function hLib = crl_table_my_add
В теле функции составьте таблицу путем вызова функционального RTW.TflTable.
Создайте запись для отображения функции с вызовом RTW.TflCFunctionEntry функция.
hEnt = RTW.TflCFunctionEntry;
Параметры записи функции множества с вызовом setTflCFunctionEntryParameters функция.
hEnt.setTflCFunctionEntryParameters( ...
'Key', 'my_add', ...
'Priority', 100, ...
'ImplementationName', 'my_add_replacement', ...
'ImplementationHeaderFile', 'my_add_replacement.h', ...
'ImplementationSourceFile', 'my_add_replacement.c');Создайте концептуальные аргументы 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);Создайте аргументы реализации и добавьте их в запись. Этот пример использует вызовы 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);
Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.
hLib.addEntry(hEnt);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте код и отчет.
Рассмотрите замены кода.