При генерации кода MATLAB® Coder™ использует следующие соглашения о вызовах:
Массивы передач ссылкой как входные параметры.
Возвращает массивы ссылкой как выходные параметры.
Если вы не оптимизируете свой код при помощи той же переменной как оба ввода и вывода, скаляры передач значением как входные параметры. В этом случае MATLAB CODER передает скаляр ссылкой.
Возвращает скаляры значением для единственных выходных функций.
Возвращает скаляры ссылкой:
Для функций с несколькими выходными параметрами.
Когда вы используете ту же переменную в качестве обоих вводов и выводов.
Для получения дополнительной информации об оптимизации вашего кода при помощи той же переменной как оба ввода и вывода, смотрите, Устраняют Избыточные Копии Входных параметров функции.
Можно вызвать функции C/C++, сгенерированные для библиотек как пользовательский код C/C++ от функций MATLAB, которые подходят для генерации кода. Для статических библиотек необходимо использовать функцию coder.ceval
, чтобы перенести вызовы функции, как в этом примере:
function y = callmyCFunction %#codegen y = 1.5; y = coder.ceval('myCFunction',y); end
, callmyCFunction
вызывает пользовательскую функцию C myCFunction
, который берет один входной параметр.Для динамически подключаемых библиотек можно также использовать coder.ceval
.
Существуют дополнительные требования для того, чтобы вызвать функции C/C++ из кода MATLAB в следующих ситуациях:
Вы хотите вызвать сгенерированные библиотеки C/C++ или исполняемые файлы от функции MATLAB. Вызовите функции обслуживания, сгенерированные MATLAB CODER, как описано в Вызове Инициализируют и Отключают Функции.
Вы хотите вызвать функции C/C++, которые сгенерированы от функций MATLAB, которые имеют больше чем один вывод, как описано в Вызывании Функций C/C++ с Несколькими Выходными параметрами.
Вы хотите вызвать функции C/C++, которые сгенерированы от функций MATLAB что возвращаемые массивы, как описано в Вызывании Функций C/C++ это Возвращаемые массивы.
Когда вы преобразовываете функцию MATLAB в библиотечную функцию C/C++ или исполняемый файл C/C++, MATLAB CODER автоматически генерирует две функции обслуживания, которые необходимо вызвать наряду с функцией C/C++.
Функция обслуживания | Когда вызвать |
---|---|
primary_function_name_initialize | Прежде чем вы вызовете свой исполняемый файл C/C++ или библиотечную функцию впервые |
primary_function_name_terminate | После того, как вы вызываете свой исполняемый файл C/C++ или библиотечную функцию в последний раз |
Из кода C/C++ можно вызвать эти функции непосредственно. Однако, чтобы вызвать их из кода MATLAB, который подходит для генерации кода, необходимо использовать функцию coder.ceval
. coder.ceval
является функцией MATLAB CODER, но не поддержан нативным языком MATLAB. Поэтому, если ваш код MATLAB использует эту функцию, используйте coder.target
, чтобы отключить эти вызовы в MATLAB и заменить их на эквивалентные функции.
Несмотря на то, что MATLAB CODER может сгенерировать код C/C++ от функций MATLAB, которые имеют несколько выходных параметров, сгенерированный код C/C++ не может возвратить несколько выходных параметров непосредственно, потому что язык C/C++ не поддерживает несколько возвращаемых значений. Вместо этого можно достигнуть эффекта возврата нескольких выходных параметров от функции C/C++ при помощи coder.wref
с coder.ceval
.
Несмотря на то, что MATLAB CODER может сгенерировать код C/C++ от функций MATLAB, что возвращаемые значения как массивы, сгенерированный код не может возвращаемые массивы значением, потому что язык C/C++ ограничивается возвращением единственных, скалярных значений. Вместо этого вы можете возвращаемые массивы от своей функции C/C++ ссылкой как указатели при помощи coder.wref
с coder.ceval
.