coder.cinclude

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

Описание

пример

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

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

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

Примечание

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

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

Если allfiles является trueMATLAB Coder генерирует оператор include почти во всех исходных файлах C/C + +, кроме некоторых файлов утилиты. Это поведение является coder.cinclude поведение из R2016a и более ранних релизов. Наличие оператора include в этих дополнительных файлах может увеличить время компиляции и сделать сгенерированный код менее читаемым. Используйте эту опцию, только если ваш код зависит от унаследованного поведения. Если 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"

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

Сгенерируйте код из 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

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

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

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

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

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

#include "myMult2.h"

Чтобы узнать больше об интеграции пользовательского кода в блок MATLAB Function, смотрите Интегрирация кода С с использованием функционального блока MATLAB (Simulink).

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

свернуть все

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

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

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

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

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

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

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

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

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

Ограничения

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

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

Совет

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

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

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

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

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

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

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

Введенный в R2013a