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);
Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.
Протестировать пример:
Укажите таблицу, которая содержит запись в заменяющей библиотеке кода.
Сконфигурируйте генератор кода, чтобы пользоваться заменяющей библиотекой кода и включать Заменяющий Отчет Кода в отчет генерации кода.
Сгенерируйте код и отчет.
Рассмотрите замены кода.