В этом примере показов, как использовать внешние Коды С в Системный объект.
Системные объекты позволяют вам реализовать алгоритмы с помощью MATLAB. Системные объекты являются специализированным видом объекта MATLAB, разработанным специально для реализации и симуляции динамических систем с входами, которые изменяются с течением времени.
После того, как вы задаете Системный объект, можно включить его в модель Simulink с помощью блока MATLAB System.
Блок MATLAB System использует системный объект ExternalCCode который вызывает внешнюю функцию C extSum для вычисления суммы его входных элементов. Блок Display показывает результат суммы значений от исходного блока.

Вы можете получить доступ к исходному коду MATLAB, используемому блоком MATLAB System, нажав гиперссылку «Source code» из диалогового окна блока. Системный объект ExternalCCode реализует stepImpl метод вычисления его выхода. stepImpl вызывает внешнюю функцию C extSum для выполнения расчетов. Системный объект наследует от coder.ExternalDependency Класс и реализует следующие методы для использования внешних Кодов С.
getDescriptiveName - Верните имя, которое вы хотите связать с внешней зависимостью
isSupportedContext - Возвращает true, если внешняя зависимость поддерживается в текущем контексте сборки
updateBuildInfo - Предоставить дополнительную информацию, необходимую для соединения внешнего кода
Системный объект также вызывает coder.cinclude от stepImpl метод включения внешнего файла заголовка C sum.h.
classdef ExternalCCode < matlab.System & coder.ExternalDependency
% ExternalCCode Compute output by calling into external C Code
methods(Access = protected)
function y = stepImpl(~, a)
% Add header file sum.h to build
coder.cinclude('sum.h');
y = 0.0; %#ok<NASGU> % Pre-initialize y since coder cannot
% identify the type of output y from an
% external C function
% Call external C function to calculate sum of input elements
y = coder.ceval('extSum', coder.rref(a), int32(numel(a)));
end
end
methods(Static)
function bName = getDescriptiveName(~)
% Return a descriptive name for the external dependency. Code
% generator uses this name for error messages.
bName = 'SumAPI';
end
function tf = isSupportedContext(~)
% Use this function to determine whether current build context
% supports external dependency. Build context includes information
% about target language and code generation target.
tf = true;
end
function updateBuildInfo(buildInfo, ~)
% Add source file sum.c to build
buildInfo.addSourceFiles('sum.c');
end
end
end
Внешняя функция C extSum определяется в файле sum.c.
#include "sum.h"
double extSum(const double *a, int numElems)
{
int ii;
double sum = 0.0;
for (ii=0; ii < numElems; ii++) {
sum += a[ii];
}
return sum;
}
extSum заявлен в sum.h.
#ifndef SUM_H #define SUM_H extern double extSum(const double *a, int numElems); #endif
coder.ceval | coder.cinclude | coder.ExternalDependency.updateBuildInfo