coder.cinclude

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

Описание

пример

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

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

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

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
    ...

Советы

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

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

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

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

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

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

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

Введенный в R2013a