Вызовите Сгенерированные Функции C/C++

Соглашения для Вызова функций в сгенерированном коде

При генерации кода MATLAB® Coder™ использует следующие соглашения о вызовах:

  • Массивы передач ссылкой как входные параметры.

  • Возвращает массивы ссылкой как выходные параметры.

  • Если вы не оптимизируете свой код при помощи той же переменной как оба ввода и вывода, скаляры передач значением как входные параметры. В этом случае MATLAB Coder передает скаляр ссылкой.

  • Возвращает скаляры значением для одно выходных функций.

  • Возвращает скаляры ссылкой:

    • Для функций с несколькими выходными параметрами.

    • Когда вы используете ту же переменную в качестве обоих вводов и выводов.

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

Как Вызвать Функции C/C++ из кода MATLAB

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

function y = callmyCFunction %#codegen
  y = 1.5;
  y = coder.ceval('myCFunction',y);
end
Здесь, функция MATLAB, callmyCFunction вызывает пользовательскую функцию C myCFunction, который берет один входной параметр.

Для динамически подключаемых библиотек можно также использовать coder.ceval.

Существуют дополнительные требования для того, чтобы вызвать функции C/C++ из кода MATLAB в следующих ситуациях:

Вызов инициализирует и отключает функции

Когда вы преобразовываете функцию 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 и заменить их на эквивалентные функции.

Вызывание Функций C/C++ с Несколькими Выходными параметрами

Несмотря на то, что MATLAB Coder может сгенерировать код C/C++ от функций MATLAB, которые имеют несколько выходных параметров, сгенерированный код C/C++ не может возвратить несколько выходных параметров непосредственно, потому что язык C/C++ не поддерживает несколько возвращаемых значений. Вместо этого можно достигнуть эффекта возвращения нескольких выходных параметров функции C/C++ при помощи coder.wref с coder.ceval.

Вызывание Функций C/C++ это Возвращаемые массивы

Несмотря на то, что MATLAB Coder может сгенерировать код C/C++ от функций MATLAB, что возвращаемые значения как массивы, сгенерированный код не может возвращаемые массивы значением, потому что язык C/C++ ограничивается возвращением одного, скалярных значений. Вместо этого вы можете возвращаемые массивы от своей функции C/C++ ссылкой как указатели при помощи coder.wref с coder.ceval.