coder.cinclude

Включайте заголовочный файл в сгенерированный код

Описание

пример

coder.cinclude(headerfile) включает заголовочный файл в сгенерированный исходный код C/C++.

MATLAB® Coder™ генерирует включать оператор в исходных файлах C/C++, которые сгенерированы из кода MATLAB, который содержит coder.cinclude вызвать.

В Simulink® модель, когда a coder.cinclude вызов появляется в блоке MATLAB Function, генератор кода помещает включать оператор в заголовочный файл модели.

Примечание

Поместите a coder.cinclude вызов максимально близко coder.ceval вызовите, который требует заголовочного файла.

coder.cinclude(headerfile,'InAllSourceFiles',allfiles) использует allfiles опция, чтобы определить, включать ли заголовочный файл почти во все исходные файлы C/C++.

Если allfiles true, MATLAB Coder генерирует включать оператор почти во всех исходных файлах C/C++, за исключением некоторых служебных файлов. Это поведение coder.cinclude поведение от R2016a и более ранних релизов. Присутствие включать оператора в этих дополнительных файлах может увеличить время компиляции и сделать сгенерированный код менее читаемым. Используйте эту опцию, только если ваш код зависит от устаревшего поведения. Если allfiles false, поведение совпадает с поведением coder.cinclude(headerfile).

В блоке MATLAB Function, coder.cinclude(headerfile,'InAllSourceFiles', allfiles) совпадает с coder.cinclude(headerfile).

Примеры

свернуть все

Сгенерируйте код от функции MATLAB, которая вызывает внешнюю функцию C. Использование coder.cinclude включать необходимый заголовочный файл в сгенерированный код C.

В перезаписываемой папке создайте подпапку mycfiles.

Запишите функции C myMult2.c это удваивает его вход. Сохраните его в mycfiles.

#include "myMult2.h"
double myMult2(double u)
{
    return 2 * u;
}

Запишите заголовочному файлу myMult2.h. Сохраните его в mycfiles.

#if !defined(MYMULT2)
#define MYMULT2
extern double myMult2(double);
#endif

Запишите функцию MATLAB, myfunc, это включает myMult2.h и вызовы myMult2 для генерации кода только.

function y = myfunc
%#codegen
y = 21;
if ~coder.target('MATLAB')
    % Running in generated code
    coder.cinclude('myMult2.h');
    y = coder.ceval('myMult2', y);
else
    % Running in MATLAB
    y = y * 2;
end
end

Создайте объект настройки кода для статической библиотеки. Задайте местоположения myMult2.h и myMult2.c

cfg = coder.config('lib');
cfg.CustomInclude = fullfile(pwd,'mycfiles');
cfg.CustomSource = fullfile(pwd,'mycfiles','myMult2.c');

Сгенерируйте код.

codegen -config cfg myfunc -report

Файл myfunc.c содержит этот оператор:

#include "myMult2.h"

Включать оператор не появляется ни в каком другом файле.

Сгенерируйте код от блока MATLAB Function, который вызывает внешнюю функцию C. Использование coder.cinclude включать необходимый заголовочный файл в сгенерированный код C.

В перезаписываемой папке создайте подпапку mycfiles.

Запишите функции C myMult2.c это удваивает его вход. Сохраните его в mycfiles.

#include "myMult2.h"
double myMult2(double u)
{
    return 2 * u;
}

Запишите заголовочному файлу myMult2.h. Сохраните его в mycfiles.

#if !defined(MYMULT2)
#define MYMULT2
extern double myMult2(double);
#endif

Создайте модель Simulink, которая содержит блок MATLAB Function, соединенный с блоком Outport.

В блоке MATLAB Function добавьте функцию myfunc это включает myMult2.h и вызовы myMult2.

function y = myfunc
%#codegen
y = 21;
coder.cinclude('myMult2.h');
y = coder.ceval('myMult2', y);
% Specify the locations of myMult2.h and myMult2.c
coder.extrinsic('pwd', 'fullfile');
customDir = coder.const(fullfile(pwd, 'mycfiles'));
coder.updateBuildInfo('addIncludePaths', customDir);
coder.updateBuildInfo('addSourcePaths', customDir);
coder.updateBuildInfo('addSourceFiles', 'myMult2.c');
end

Откройте диалоговое окно Configuration Parameters.

На панели Solver выберите решатель фиксированного шага.

Сохраните модель как mymodel.

Создайте модель.

Файл mymodel.h содержит этот оператор:

#include "myMult2.h"

Чтобы читать больше об объединяющемся пользовательском коде в блоке MATLAB function, смотрите, Интегрируют код С при помощи блока MATLAB function (Simulink).

Входные параметры

свернуть все

Имя заголовочного файла, заданного как вектор символов или строковый скаляр. headerfile должно быть постоянное время компиляции.

Заключите системное имя заголовочного файла в угловые скобки < >. Сгенерированный #include оператор для системного заголовочного файла имеет формат #include <sysheader>. Системный заголовочный файл должен быть в стандартном месте или на включать пути. Задайте включать путь при помощи параметров пользовательского кода генерации кода.

Пример: coder.cinclude('<sysheader.h>')

Для заголовочного файла, который не является системным заголовочным файлом, не используйте угловые скобки. Сгенерированный #include оператор для заголовочного файла, который не является системным заголовочным файлом, имеет формат #include "myHeader". Заголовочный файл должен быть в текущей папке или на включать пути. Задайте включать путь при помощи параметров пользовательского кода генерации кода.

Пример: coder.cinclude('myheader.h')

Типы данных: char

Опция, чтобы включать заголовочный файл всего сгенерировала исходные файлы C/C++. Если allfiles true, MATLAB Coder генерирует включать оператор почти во всех исходных файлах C/C++, за исключением некоторых служебных файлов. Если allfiles false, поведение совпадает с поведением coder.cinclude(headerfile).

В блоке MATLAB Function генератор кода игнорирует всю опцию исходных файлов.

Типы данных: логический

Ограничения

  • Не вызывать coder.cinclude в условных построениях во время выполнения, таких как if операторы, switch операторы, while- циклы и for- циклы. Можно вызвать coder.cinclude в условных операторах времени компиляции, такой как coder.target. Например:

    ...
     if ~coder.target('MATLAB')
       coder.cinclude('foo.h');
       coder.ceval('foo');
    end
    ...

Советы

  • Прежде a coder.ceval вызовите, вызовите coder.cinclude включать заголовочный файл, требуемый внешней функцией это coder.ceval вызовы.

  • Посторонний включают операторы в сгенерированный код C/C++, может увеличить время компиляции и уменьшать удобочитаемость кода. Чтобы избежать посторонний включают операторы в код, сгенерированный MATLAB Coder, применяют эти лучшие методы:

    • Поместите a coder.cinclude вызов максимально близко coder.ceval вызовите, который требует заголовочного файла.

    • Не устанавливайте allfiles к true.

    Для блока MATLAB Function генератор кода генерирует включать оператор в заголовочном файле модели.

  • В R2016a и более ранних релизах, для любого coder.cinclude вызов, MATLAB Coder включал заголовочный файл в, почти все сгенерировали исходные файлы C/C++, за исключением некоторых служебных файлов. Если у вас есть код, который зависит от этого устаревшего поведения, можно сохранить устаревшее поведение при помощи этого синтаксиса:

    coder.cinclude(headerfile,'InAllSourceFiles',true)

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Введенный в R2013a