exponenta event banner

coder.cinclude

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

Описание

пример

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

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

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

Примечание

Разместить coder.cinclude позвоните как можно ближе к coder.ceval вызов, для которого требуется файл заголовка.

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

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

В функциональном блоке MATLAB 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"

Оператор include не отображается ни в одном другом файле.

Создайте код из блока функции 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

Создайте модель Simulink, содержащую функциональный блок MATLAB, подключенный к блоку 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

Откройте диалоговое окно «Параметры конфигурации».

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

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

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

Файл mymodel.h содержит следующую инструкцию:

#include "myMult2.h"

Дополнительные сведения об интеграции пользовательского кода в функциональный блок MATLAB см. в разделе Интеграция кода C с помощью функционального блока MATLAB.

Входные аргументы

свернуть все

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

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

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

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

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

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

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

В блоке MATLAB Function генератор кода игнорирует опцию all source files.

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

Ограничения

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

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

Совет

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

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

    • Разместить coder.cinclude позвоните как можно ближе к coder.ceval вызов, для которого требуется файл заголовка.

    • Не устанавливать allfiles кому true.

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

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

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

Представлен в R2013a