По умолчанию во время создания кода MATLAB ® Coder™ секционирует код в соответствии со структурой файла MATLAB. Это сопоставление «один к одному» позволяет легко сопоставить файлы, созданные в C/C + +, с скомпилированным кодом MATLAB. Кодер MATLAB не может создавать одно и то же однозначное соответствие для функций MATLAB, встроенных в сгенерированный код (см. раздел Разбиение файлов и вложение).
Можно также выбрать создание всех функций C/C + + в одном файле. Дополнительные сведения см. в разделе Выбор метода разбиения файлов. Этот параметр упрощает интеграцию кода с существующим встроенным программным обеспечением.
Чтобы открыть диалоговое окно «Генерация», на странице «Генерация кода» щелкните стрелку «Генерация».![]()
Щелкните Дополнительные параметры.
На вкладке «Внешний вид кода» задайте для метода секционирования сгенерированных файлов значение Generate one file for each MATLAB file или Generate all functions into a single file.
Используйте codegen объект конфигурации FilePartitionMethod вариант. Например, для компиляции функции foo который не имеет входных данных и генерирует один файл C/C + + для каждой функции MATLAB:
Создайте объект конфигурации MEX и установите FilePartitionMethod вариант:
mexcfg = coder.config('mex');
mexcfg.FilePartitionMethod = 'MapMFileToCFile';Использование -config , передать объект конфигурации в codegen:
codegen -config mexcfg -O disable:inline foo % Disable inlining to generate one C/C++ file for each MATLAB function
По умолчанию для функций MATLAB, которые не встроены, кодер MATLAB генерирует один файл C/C + + для каждого файла MATLAB. В этом случае разделы кодера MATLAB генерируют код C/C + + так, чтобы он соответствовал файлам MATLAB.
Для каждой функции MATLAB начального уровня (верхнего уровня) кодер MATLAB генерирует один исходный, верхний и объектный файл C/C + + с тем же именем, что и файл MATLAB.
Например, предположим, что вы определяете простую функцию foo который вызывает функцию identity. Исходный файл foo.m содержит следующий код:
function y = foo(u,v) %#codegen s = single(u); d = double(v); y = double(identity(s)) + identity(d);
Вот код для identity.m :
function y = identity(u) %#codegen y = u;
В приложении MATLAB Coder для создания статической библиотеки C для foo.m:
Определение входных данных u и v. Дополнительные сведения см. в разделе Задание свойств входов функции точки входа с помощью приложения.
Чтобы открыть диалоговое окно «Генерация», на странице «Генерация кода» щелкните стрелку «Генерация».![]()
Задайте для типа построения значение Static Library
Щелкните Дополнительные параметры.
На вкладке «All Settings» в разделе «Function Inlining» установите для параметра «Inline threshold» значение 0
Щелкните Закрыть (Close)
Чтобы создать библиотеку, нажмите кнопку «Создать».
Создание статической библиотеки C для foo.m, в командной строке введите:
codegen -config:lib -O disable:inline foo -args {0, 0}
% Use the -args option to specify that u and v are both
% real, scalar doublesКодер MATLAB генерирует исходные, заголовочные и объектные файлы для foo и identity в папке вывода.

Для каждой локальной функции кодер MATLAB генерирует код в том же файле C/C + +, что и вызывающая функция. Например, предположим, что вы определяете функциюfoo который вызывает локальную функцию identity:
function y = foo(u,v) %#codegen s = single(u); d = double(v); y = double(identity(s)) + identity(d); function y = identity(u) y = u;
Чтобы создать библиотеку C++, перед созданием кода выберите компилятор C++ и задайте C++ в качестве целевого языка. Например, в командной строке:
Выберите C++ в качестве целевого языка:
cfg = coder.config('lib')
cfg.TargetLang='C++'Создайте библиотеку C++:
codegen -config cfg foo -args {0, 0}
% Use the -args option to specify that u and v are both
% real, scalar doublesВ основной функции foo, Кодер MATLAB встраивает код для identity локальная функция.

Примечание
При указании C++, Кодер MATLAB оборачивает C код в .cpp файлы, чтобы можно было использовать C++ компилятор и интерфейс с внешним C++ приложения. Он не генерирует C++ классы.
Вот фрагмент созданного кода в foo.cpp:
...
/* Function Definitions */
double foo(double u, double v)
{
return (double)(float)u + v;
}
...
Перегруженная функция - это функция, которая имеет несколько реализаций для размещения различных классов ввода. Для каждой реализации (не встроенной) кодер MATLAB генерирует отдельный файл C/C + + с уникальным числовым суффиксом.
Например, предположим, что вы определяете простую функцию multiply_defined:
%#codegen function y = multiply_defined(u) y = u+1;
Затем добавляются еще две реализации multiply_defined, один для управления входами типа single (в @single подпапка) и другой для входов типа double (в @double подпапка).
Для вызова каждой реализации определите функцию. call_multiply_defined:
%#codegen function [y1,y2,y3] = call_multiply_defined y1 = multiply_defined(int32(2)); y2 = multiply_defined(2); y3 = multiply_defined(single(2));
Затем создайте код C для перегруженной функции multiply_defined. Например, в командной строке MATLAB введите:
codegen -O disable:inline -config:lib call_multiply_defined
Кодер MATLAB генерирует исходные, заголовочные и объектные файлы C для каждой реализации multiply_defined, как было подчеркнуто. Используйте числовые суффиксы для создания уникальных имен файлов.

Типы и расположения созданных файлов зависят от указанного целевого объекта. Для всех целей, если ошибки или предупреждения возникают во время построения или если явно запрашивается отчет, MATLAB Coder создает отчеты.
Каждый раз, когда кодер MATLAB генерирует один и тот же тип выходных данных для одного и того же кода или проекта, он удаляет файлы из предыдущей сборки. Если необходимо сохранить файлы из сборки, скопируйте их в другое место перед запуском другой сборки.
По умолчанию кодер MATLAB генерирует следующие файлы для функции MEX (mex) цели.
| Тип файлов | Местоположение |
|---|---|
| Файлы MEX для конкретной платформы | Текущая папка |
Файлы источников, заголовков и объектов MEX и C/C + + | codegen/mex/function_name |
HTML-отчеты | codegen/mex/function_name/html |
По умолчанию кодер MATLAB генерирует следующие файлы для целей статической библиотеки C/C + +.
| Тип файлов | Местоположение |
|---|---|
Исходные, библиотечные, заголовочные и объектные файлы C/C + + | codegen/lib/function_name |
HTML-отчеты | codegen/lib/function_name/html |
По умолчанию программа MATLAB Coder генерирует следующие файлы для целей динамической библиотеки C/C + +.
| Тип файлов | Местоположение |
|---|---|
Исходные, библиотечные, заголовочные и объектные файлы C/C + + | codegen/dll/function_name |
HTML-отчеты | codegen/dll/function_name/html |
По умолчанию кодер MATLAB генерирует следующие файлы для исполняемых целевых файлов C/C + +.
| Тип файлов | Местоположение |
|---|---|
Исходные, заголовочные и объектные файлы C/C + + | codegen/exe/function_name |
HTML-отчеты | codegen/exe/function_name/html |
Использование приложения кодера MATLAB
| Измениться | Действие |
|---|---|
| Имя выходного файла |
|
| Расположение выходного файла |
|
В командной строке. Можно изменить имя и расположение созданных файлов с помощью codegen варианты -o и -d.
Способ создания кодовыми секциями MATLAB кода C/C + + зависит от того, нужно ли создавать один файл C/C + + для каждого файла MATLAB и встроены ли функции MATLAB.
| Если вы | Кодер MATLAB |
|---|---|
| Создание всех функций C/C + + в одном файле и отключение встраивания | Создает один файл C/C + + без встроенных функций. |
| Создание всех функций C/C + + в одном файле и включение встраивания | Создает один файл C/C + +. Встроенные функции, размеры которых находятся в пределах порогового значения. |
| Создайте один файл C/C + + для каждого файла MATLAB и отключите встраивание | Разделы создали код C/C + +, соответствующий структуре файла MATLAB. См. раздел Разбиение созданных файлов с одним файлом C/C + + на файл MATLAB. |
| Создайте один файл C/C + + для каждого файла MATLAB и включите встраивание | Помещает встроенные функции в тот же файл C/C + +, в который они встроены. Даже при включении встраивания кодер MATLAB встраивает только те функции, размеры которых находятся в пределах порога встраивания. Для функций MATLAB, которые не встроены, кодер MATLAB разделяет сгенерированный код C/C + +, как описано выше. |
Взвешивание разбиения файлов против встраивания представляет собой компромисс между читаемостью, эффективностью и простотой интеграции кода MATLAB с существующим встроенным программным обеспечением.
| При создании | Сгенерированный код C/C + + | Преимущества | Недостатки |
|---|---|---|---|
| Все функции C/C + + в одном файле | Не соответствует структуре файла MATLAB | Простота интеграции с существующим встроенным ПО | Трудно сопоставить код C/C + + с исходным файлом MATLAB |
| Один файл C/C + + для каждого файла MATLAB и включить встраивание | Не совсем соответствует структуре файла MATLAB | Программа выполняется быстрее | Трудно сопоставить код C/C + + с исходным файлом MATLAB |
| Один файл C/C + + для каждого файла MATLAB и отключение встраивания | Соответствует структуре файла MATLAB | Легко сопоставить код C/C + + с исходным файлом MATLAB | Программа работает менее эффективно |
Встраивание включено по умолчанию. Поэтому для создания одного файла C/C + + для каждой функции MATLAB верхнего уровня необходимо:
Используется для создания одного файла C/C + + для каждой функции MATLAB верхнего уровня. Дополнительные сведения см. в разделе Выбор метода разбиения файлов.
Явное отключение встраивания (глобально или для отдельных функций MATLAB).
Как отключить встраивание в глобальном масштабе с помощью приложения MATLAB Coder App
Чтобы открыть диалоговое окно «Генерация», на странице «Генерация кода» щелкните стрелку «Генерация».![]()
Щелкните Дополнительные параметры.
На вкладке All Settings (Все настройки) в разделе Function Inlining (Встроенная функция) установите для параметра Inline threshold значение 0.
Как отключить глобальную вставку в командной строке. Чтобы отключить встраивание функций, используйте -O disable:inline вариант с codegen. Например, чтобы отключить встраивание и создать функцию MEX для функции foo который не имеет входных данных:
codegen -O disable:inline foo
Дополнительные сведения см. в описании codegen.
Как отключить встраивание для отдельных функций. Чтобы отключить встраивание для отдельной функции MATLAB, добавьте директиву coder.inline('never'); в отдельной строке исходного файла MATLAB после подписи функции.
function y = foo(u,v) %#codegen coder.inline('never'); s = single(u); d = double(v); y = double(identity(s)) + identity(d);
codegen не является встроенными функциями точки входа.
coder.inline директива применяется только к функции, в которой она отображается. В этом примере инлайнинг отключен для функции foo, но не для identity, функция верхнего уровня, определенная в отдельном файле MATLAB и вызванная foo. Как отключить встраивание для identity, добавить эту директиву после подписи ее функции в исходный файл identity.m. Дополнительные сведения см. в разделе coder.inline.
Более эффективный способ отключения встраивания для обеих функций см. в разделе Как отключить встраивание глобально в командной строке.
Чтобы сопоставить код C/C + +, создаваемый с исходными встроенными функциями, добавьте комментарии в код MATLAB для идентификации функции. Эти комментарии появятся в коде C/C + + и помогут сопоставить созданный код с исходными функциями MATLAB.
Чтобы изменить поведение встраивания, настройте параметр порога встраивания.
Изменение порога встраивания с помощью приложения кодера MATLAB
Чтобы открыть диалоговое окно «Генерация», на странице «Генерация кода» щелкните стрелку «Генерация».![]()
Щелкните Дополнительные параметры.
На вкладке All Settings в разделе Function Inlining задайте значение параметра Inline threshold.
Изменение порога встраивания в командной строке. Установка значения InlineThreshold параметра объекта конфигурации. Посмотрите coder.MexCodeConfig, coder.CodeConfig, coder.EmbeddedCodeConfig.