При генерации кода 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.